Re[2]: MDI & QT best practices
От: Stanislav V. Zudin Россия  
Дата: 04.04.12 11:08
Оценка:
Здравствуйте, MTD, Вы писали:


MTD>Здравствуйте, Stanislav V. Zudin, Вы писали:


SVZ>>Для начала, как работать с меню (menuBar)? Есть ли возможность загрузить меню целиком? Или сборка из отдельных элементов в рантайме это нормальная практика?


MTD>Да, это нормальная практика. Что не устраивает?

Получается очень большой объем ручной работы. Ну и приходится создавать невероятную прорву QAction.
Кроме того, у меня сложилось впечатление, что в QT MDI не очень поощряется, особенно с разнотипными документами, что требуется мне.

SVZ>>Или есть какие-то средства "автоматизации", не упомянутые в примерах? Типа карт сообщений в WTL/MFC?


MTD>Не в курсе, что это. Покажи, что хочется.


В WinAPI/MFC/WTL команда от тулбара или меню идентифицируется числовым идентификатором, который передается в виндовом сообщении WM_COMMAND.
Поэтому все команды легко свести к массиву/мапу указателей на интерфейсы или функции. При этом легко гонять все команды от одного обработчика к другому.
Например, в MFC команду можно обработать во вьюшке, Документе, главном окне приложения — сообщение передается по цепочке, пока кто-нибудь его не обработает.
Если в определенный момент желающих обработать не найдется, то ничего криминального не произойдет — команда похерится.

SVZ>>Если разные документы должны обрабатывать одну и ту же команду, например "Печать", где принято создавать соответствующий QAction?

SVZ>>В MainWindow? А как тогда передать обработку активному документу (использовать грядку из qobject_cast'ов)?
SVZ>>Или же создавать в каждом документе свою копию QAction'а? Не будут ли они конфликтовать в этом случае?

MTD>Это не имеет отношения к Qt — это вопрос к дизайну. Пример:


MTD>
MTD>class AbstractData
MTD>{
MTD>   virtual void Print() = 0;
MTD>};

MTD>void printAction()
MTD>{
MTD>   CurrentData_->Print();
MTD>}
MTD>


Да, я думал про такое. Потому и решил спросить тех, кто использует QT в боевых условиях, что есть в фреймворке для решения моей задачи.
Оказалось, готовых решений нет и надо городить свой велосипед.

Спасибо тебе за разъяснения.
_____________________
С уважением,
Stanislav V. Zudin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.