Класс QDesignerCustomWidgetInterface
Класс QDesignerCustomWidgetInterface позволяет Qt Designer получать доступ к пользовательским виджетам и создавать их. Подробнее...
| Заголовок: | #include <QDesignerCustomWidgetInterface> |
| qmake: | QT += designer |
Открытые функции
| виртуальный | ~QDesignerCustomWidgetInterface() |
| виртуальный QString | codeTemplate() const |
| виртуальный QWidget * | createWidget(QWidget *parent) = 0 |
| виртуальный QString | domXml() const |
| виртуальный QString | group() const = 0 |
| виртуальный QIcon | icon() const = 0 |
| виртуальный QString | includeFile() const = 0 |
| виртуальный void | initialize(QDesignerFormEditorInterface *formEditor) |
| виртуальный bool | isContainer() const = 0 |
| виртуальный bool | isInitialized() const |
| виртуальный QString | name() const = 0 |
| виртуальный QString | toolTip() const = 0 |
| виртуальный QString | whatsThis() const = 0 |
Макросы
| QDESIGNER_WIDGET_EXPORT |
Подробное описание
QDesignerCustomWidgetInterface предоставляет интерфейс для пользовательского виджета. Класс содержит набор функций, которые необходимо переопределить для возвращения базовой информации о виджете, например, имени класса и имени заголовочного файла. Другие функции должны быть реализованы для инициализации плагина при его загрузке и создания экземпляров пользовательского виджета для использования в Qt Designer.
При реализации пользовательского виджета необходимо унаследовать от QDesignerCustomWidgetInterface, чтобы предоставить ваш виджет Qt Designer. Например, это объявление для плагина, используемого в примере Плагина пользовательского виджета, который позволяет использовать пользовательский виджет аналоговых часов Qt Designer:
class AnalogClockPlugin : public QObject, public QDesignerCustomWidgetInterface
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
Q_INTERFACES(QDesignerCustomWidgetInterface)
public:
explicit AnalogClockPlugin(QObject *parent = nullptr);
bool isContainer() const override;
bool isInitialized() const override;
QIcon icon() const override;
QString domXml() const override;
QString group() const override;
QString includeFile() const override;
QString name() const override;
QString toolTip() const override;
QString whatsThis() const override;
QWidget *createWidget(QWidget *parent) override;
void initialize(QDesignerFormEditorInterface *core) override;
private:
bool initialized = false;
}; Обратите внимание, что единственной частью определения класса, специфичной для данного пользовательского виджета, является имя класса. Кроме того, поскольку мы реализуем интерфейс, мы должны убедиться, что он известен системе метаобъектов с помощью макроса Q_INTERFACES(). Это позволяет Qt Designer использовать функцию qobject_cast() для запроса поддерживаемых интерфейсов, используя только указатель QObject.
После того, как Qt Designer загрузит плагин пользовательского виджета, он вызывает функцию интерфейса initialize(), чтобы дать ему возможность настроить любые необходимые ресурсы. Эта функция вызывается с параметром QDesignerFormEditorInterface, который предоставляет плагину доступ к API Qt Designer.
Qt Designer создает экземпляры пользовательского виджета, вызывая функцию плагина createWidget() с подходящим родительским виджетом. Плагины должны создать и вернуть экземпляр пользовательского виджета с указанным родительским виджетом.
Экспортируйте плагин вашего пользовательского виджета для Qt Designer с помощью макроса Q_PLUGIN_METADATA(). Например, если библиотека под названием libcustomwidgetplugin.so (в Unix) или libcustomwidget.dll (в Windows) содержит класс виджета MyCustomWidget, мы можем экспортировать его, добавив следующую строку в файл, содержащий заголовок плагина:
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDesignerCustomWidgetInterface")
Этот макрос гарантирует, что Qt Designer может получить доступ к пользовательскому виджету и создать его. Без этого макроса Qt Designer не сможет его использовать.
При реализации плагина пользовательского виджета необходимо создать его как отдельную библиотеку. Если вы хотите включить несколько плагинов пользовательских виджетов в одну библиотеку, вам необходимо дополнительно унаследовать от QDesignerCustomWidgetCollectionInterface.
Предупреждение: Если плагин вашего пользовательского виджета содержит свойства QVariant, имейте в виду, что поддерживаются только следующие типы типов:
- QVariant::ByteArray
- QVariant::Bool
- QVariant::Color
- QVariant::Cursor
- QVariant::Date
- QVariant::DateTime
- QVariant::Double
- QVariant::Int
- QVariant::Point
- QVariant::Rect
- QVariant::Size
- QVariant::SizePolicy
- QVariant::String
- QVariant::Time
- QVariant::UInt
Полный пример использования класса QDesignerCustomWidgetInterface см. в Примере пользовательского виджета. Пример показывает, как создать плагин пользовательского виджета для Qt Designer.
См. также QDesignerCustomWidgetCollectionInterface и Создание пользовательских виджетов для Qt Designer.
Документация по функциям-членам
[virtual] QDesignerCustomWidgetInterface::~QDesignerCustomWidgetInterface()
Уничтожает интерфейс пользовательского виджета.
[virtual] QString QDesignerCustomWidgetInterface::codeTemplate() const
Эта функция зарезервирована для будущего использования Qt Designer.
[pure virtual] QWidget *QDesignerCustomWidgetInterface::createWidget(QWidget *parent)
Возвращает новый экземпляр пользовательского виджета с заданным parent.
[virtual] QString QDesignerCustomWidgetInterface::domXml() const
Возвращает XML, используемый для описания свойств пользовательского виджета для Qt Designer.
[pure virtual] QString QDesignerCustomWidgetInterface::group() const
Возвращает имя группы, к которой принадлежит пользовательский виджет.
[pure virtual] QIcon QDesignerCustomWidgetInterface::icon() const
Возвращает значок, используемый для представления пользовательского виджета в окне виджетов Qt Designer.
[pure virtual] QString QDesignerCustomWidgetInterface::includeFile() const
Возвращает путь к файлу заголовка, который uic использует при создании кода для пользовательского виджета.
[virtual] void QDesignerCustomWidgetInterface::initialize(QDesignerFormEditorInterface *formEditor)
Инициализирует виджет для использования с указанным интерфейсом formEditor.
См. также isInitialized().
[pure virtual] bool QDesignerCustomWidgetInterface::isContainer() const
Возвращает true, если пользовательский виджет предназначен для использования в качестве контейнера; в противном случае возвращает false.
Большинство пользовательских виджетов не используются для размещения других виджетов, поэтому их реализации этой функции вернут false, но пользовательские контейнеры вернут true, чтобы обеспечить правильное поведение в Qt Designer.
[virtual] bool QDesignerCustomWidgetInterface::isInitialized() const
Возвращает true, если виджет был инициализирован; в противном случае возвращает false.
См. также initialize().
[pure virtual] QString QDesignerCustomWidgetInterface::name() const
Возвращает имя класса пользовательского виджета, предоставленное интерфейсом.
Возвращаемое имя должно совпадать с именем класса, используемым для пользовательского виджета.
[pure virtual] QString QDesignerCustomWidgetInterface::toolTip() const
Возвращает краткое описание виджета, которое может быть использовано Qt Designer в всплывающей подсказке.
[pure virtual] QString QDesignerCustomWidgetInterface::whatsThis() const
Возвращает описание виджета, которое может использоваться Qt Designer в справке "Что это?" для виджета.
Документация макросов
QDESIGNER_WIDGET_EXPORT
Этот макрос используется при определении пользовательских виджетов, чтобы гарантировать, что они правильно экспортируются из плагинов для использования с Qt Designer.
На некоторых платформах символы, необходимые Qt Designer для создания новых виджетов, удаляются из плагинов системой сборки, делая их непригодными для использования. Использование этого макроса гарантирует, что символы сохраняются на этих платформах и не оказывает побочных эффектов на других платформах.
Например, в примере Плагин Мирового времени экспортируется класс пользовательского виджета со следующим объявлением:
class QDESIGNER_WIDGET_EXPORT WorldTimeClock : public QWidget
{
Q_OBJECT
...
}; Эта функция была добавлена в Qt 4.1.
См. также Создание пользовательских виджетов для Qt Designer.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qdesignercustomwidgetinterface.html