QT 4: программирование GUI на С++
Шрифт:
Рис. 5.6. Диалоговое окно для создания пользовательских виджетов Qt Designer.
Недостатками метода продвижения являются недоступность в Qt Designer свойств, характерных для пользовательского виджета, и то, что пользовательский виджет представляется в QtDesigner не своим изображением. Обе эти проблемы могут быть решены при применении метода подключения.
Метод подключения требует создания библиотеки подключаемых модулей, которую Qt Designer может загружать во время выполнения и использовать для создания экземпляров виджетов. В этом случае при редактировании
Во-первых, мы должны создать подкласс QDesignerCustomWidgetInterface и переопределить несколько виртуальных функций. Мы предположим, что исходный файл подключаемого модуля расположен в каталоге с именем iconeditorplugin, а исходный текст программы IconEditor расположен в параллельном каталоге с именем iconeditor.
Ниже приводится определение класса:
Подкласс IconEditorPlugin является фабрикой класса (factory class), который инкапсулирует виджет IconEditor. Он является наследником классов QObject и QDesignerCustomWidgetIterface и использует макрос Q_INTERFACES, указывая компилятору moc на то, что второй базовый класс представляет собой подключаемый интерфейс. Его функции применяются Qt Designer для создания экземпляров класса и получения информации о нем.
IconEditorPlugin имеет тривиальный конструктор.
Функция name возвращает имя подключаемого виджета.
Функция includeFile возвращает имя заголовочного файла для заданного виджета, который инкапсулирован в подключаемом модуле. Заголовочный файл включается в программный код, сгенерированный компилятором uic.
Функция group возвращает
имя группы на панели виджетов, к которой принадлежит пользовательский виджет. Если это имя еще не используется, Qt Designer coздаст новую группу для виджета.Функция icon возвращает пиктограмму которая будет использоваться для представления пользовательского виджета на панели виджетов Qt Designer. В нашем случае мы предполагаем, что IconEditorPlugin имеет ресурсный файл Qt, содержащий соответствующий элемент для изображения редактора пиктограмм.
Функция toolTip возвращает всплывающую подсказку, которая появляется, когда мышка находится на пользовательском виджете в панели виджетов Qt Designer.
Функция whatsThis возвращает текст «What's This?» (что это?) для отображения в Qt Designer.
Функция isContainer возвращает true, если данный виджет может содержать другие виджеты; в противном случае он возвращает false. Например, QFrame представляет собой виджет, который может содержать другие виджеты. В целом любой виджет может содержать другие виджеты, но Qt Designer не позволяет это делать, если isContainer возвращает false.
Функция createWidget вызывается Qt Designer для создания экземпляра класса виджета для указанного родительского виджета.
В конце исходного файла реализации класса подключаемого модуля мы должны использовать макрос Q_EXPORT_PLUGIN2, чтобы сделать его доступным для Qt Designer. Первый аргумент — назначаемое нами имя подключаемого модуля, второй аргумент — имя класса, который его реализует.
Используемый для построения подключаемого модуля файл .pго выглядит следующим образом: