Использование пользовательских виджетов с Qt Designer
Qt Designer может отображать пользовательские виджеты с помощью своего механизма расширения плагинов, позволяющего расширить диапазон проектируемых виджетов пользователями и сторонними разработчиками. В качестве альтернативы, можно использовать существующие виджеты в качестве заглушек для классов виджетов, которые предоставляют аналогичные API.
Обработка пользовательских виджетов
Хотя Qt Designer поддерживает все стандартные виджеты Qt, некоторые специализированные виджеты могут быть недоступны в качестве стандартных по ряду причин:
- Пользовательские виджеты могут быть недоступны в момент проектирования пользовательского интерфейса.
- Пользовательские виджеты могут быть специфичными для платформы, и разработчики пользовательского интерфейса могут разрабатывать его на платформе, отличной от платформы конечных пользователей.
- Исходный код пользовательского виджета недоступен или разработчики пользовательского интерфейса не могут использовать виджет по причинам, не связанным с техническими аспектами.
В указанных ситуациях все равно возможно проектировать формы с целью использования пользовательских виджетов в приложении. Для этого мы можем использовать функцию повышения виджетов в Qt Designer.
Во всех остальных случаях, когда исходный код пользовательских виджетов доступен, мы можем адаптировать пользовательский виджет для использования с Qt Designer.
Повышение виджетов
Если некоторые формы должны быть спроектированы, но определенные пользовательские виджеты недоступны для разработчика, мы можем заменить их аналогичными виджетами для представления отсутствующих виджетов. Например, мы можем представить экземпляры класса пользовательской кнопки, MyPushButton, экземплярами QPushButton и повысить их до MyPushButton, чтобы uic генерировал соответствующий код для этого отсутствующего класса.
При выборе виджета для использования в качестве заглушки полезно сравнить API отсутствующего виджета с API стандартных виджетов Qt. Для специализированных виджетов, которые являются подклассами стандартных классов, очевидным выбором заглушки является базовый класс пользовательского виджета; например, QSlider может использоваться для специализированных подклассов QSlider.
Для специализированных виджетов, которые не имеют общего API со стандартными виджетами Qt, стоит рассмотреть адаптацию пользовательского виджета для использования в Qt Designer. Если это невозможно, то QWidget является очевидным выбором для виджета-заглушки, так как он является наименьшим общим знаменателем для всех виджетов.
Чтобы добавить заглушку, выберите объект подходящего базового класса и выберите Поднять до... из контекстного меню формы. После ввода имени класса и заголовочного файла в нижней части диалогового окна выберите Добавить. Класс заглушки теперь будет отображаться вместе с базовым классом в верхнем списке. Нажмите кнопку Поднять, чтобы принять этот выбор.
Теперь, при открытии контекстного меню формы над объектами базового класса, класс заглушки будет отображаться в подменю Поднять до, что позволит удобно повысить объекты до этого класса.
Повышенный виджет можно вернуть к его базовому классу, выбрав Спустить до из контекстного меню формы.
Пользовательские виджеты
Пользовательские виджеты можно адаптировать для использования с Qt Designer, что предоставляет разработчикам возможность настраивать пользовательский интерфейс с использованием фактических виджетов, которые будут использоваться в приложении, а не виджетов-заглушек. Процесс создания плагина пользовательского виджета описан в главе «Создание пользовательских виджетов для Qt Designer» в данном руководстве.
Чтобы использовать плагин, созданный таким образом, необходимо убедиться, что плагин находится на пути, который Qt Designer использует для поиска плагинов. Как правило, плагины, хранящиеся в $QTDIR/plugins/designer будут загружаться при запуске Qt Designer. Дополнительную информацию о построении и установке плагинов можно найти здесь. Вы также можете обратиться к документу Plugins HOWTO для получения информации о создании плагинов.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/designer-using-custom-widgets.html