Qt: Как инициализировать диалоговые виджеты? - PullRequest
1 голос
/ 21 сентября 2011

Я хотел бы знать, какова установленная процедура для инициализации элементов управления в настраиваемом диалоговом окне Qt. В коде, который я пишу, диалоговое окно будет представлять QListView, содержащее каталоги из объекта, переданного (по ссылке) классу диалога во время конструирования. Когда отображается диалоговое окно, я, очевидно, хочу, чтобы в списке отображались каталоги, настроенные в данный момент в объекте.

Где это должно быть сделано? Возможно, в переопределенном методе showEvent()?

Справочная информация : Раньше я много занимался программированием на MFC и делал бы такого рода вещи в методе OnCreate, или что-то подобное, после того, как объект window был создано.

1 Ответ

2 голосов
/ 21 сентября 2011

К счастью, Qt не требует от вас каких-либо перехватов, чтобы найти момент для создания вещей (если вы этого не хотите). Если вы посмотрите на примеры Qt для диалогов, большинство из них выполнят все конструкции в конструкторе:

http://doc.qt.io/archives/qt-4.7/examples-dialogs.html

Пример диалога вкладок, например, не выполняет инициализацию вкладок по требованию. Хотя вы можете подключить что-нибудь через сигнал currentChanged:

http://doc.qt.io/archives/qt-4.7/qtabwidget.html#currentChanged

Диалоги в стиле мастера имеют методы initializePage и cleanupPage:

http://doc.qt.io/archives/qt-4.7/qwizardpage.html#initializePage

http://doc.qt.io/archives/qt-4.7/qwizardpage.html#cleanupPage

Но по большому счету вы можете просто использовать конструктор. Я предполагаю, что главное исключение будет, если вы обнаружите, что выделяете диалоговое окно намного раньше, чем когда вы его фактически отображаете (через exec), и вы не хотите нести бремя производительности для какой-то его части, пока оно не станет показано на рисунке. Такие случаи должны быть редкими, и, вероятно, самое простое, что нужно сделать, это просто добавить собственную функцию, которую вы вызываете (например, finalizeCreationBeforeExec).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...