2.5. Динамические
диалоги.
Динамическими называются такие диалоги, которые создаются на
основе .ui файлов во время работы
программы (то бишь "на лету"). В случае с динамическими
диалогами, файлы .ui не конвертируются
утилитой uic в код C++,
а загружаются программой во время исполнения, с помощью класса
QWidgetFactory, примерно таким
образом:
QDialog *sortDialog = (QDialog *)
QWidgetFactory::create("sortdialog.ui");
Доступ к виджетам на форме такого диалога осуществляется вызовом
функции
QObject::child():
QComboBox *primaryColumnCombo = (QComboBox *)
sortDialog->child("primaryColumnCombo", "QComboBox");
Эта функция возвращает "пустой" указатель, если на
форме диалога не был найден виджет с заданным именем и типом.
Класс QWidgetFactory размещен в
отдельной библиотеке. Чтобы иметь возможность работы с классом
QWidgetFactory из Qt приложений,
необходимо добавить такую строчку в .pro
файл:
LIBS += -lqui
Этот синтаксис одинаков для любой платформы, даже при том, что он
определенно имеет отношение к Unix.
Динамические диалоги позволяют изменять компоновку формы без
необходимости пересборки приложения. Исчерпывающий пример работы с
динамическими диалогами вы найдете в главе "Subclassing and
Dynamic Dialogs" справочного руководства к Qt Designer.