Класс QDesignerCustomWidgetInterface
Класс QDesignerCustomWidgetInterface позволяет Qt Designer получать доступ к пользовательским виджетам и создавать их. Подробнее...
| Заголовок: | #include <QDesignerCustomWidgetInterface> |
| qmake: | QT += designer |
Открытые функции
| virtual | ~QDesignerCustomWidgetInterface() |
| virtual QString | codeTemplate() const |
| virtual QWidget * | createWidget(QWidget *parent) = 0 |
| virtual QString | domXml() const |
| virtual QString | group() const = 0 |
| virtual QIcon | icon() const = 0 |
| virtual QString | includeFile() const = 0 |
| virtual void | initialize(QDesignerFormEditorInterface *formEditor) |
| virtual bool | isContainer() const = 0 |
| virtual bool | isInitialized() const |
| virtual QString | name() const = 0 |
| virtual QString | toolTip() const = 0 |
| virtual QString | whatsThis() const = 0 |
Макросы
| QDESIGNER_WIDGET_EXPORT |
Подробное описание
Класс QDesignerCustomWidgetInterface позволяет Qt Designer получать доступ к пользовательским виджетам и создавать их.
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)
Возвращает новый экземпляр пользовательского виджета с заданным родительским.
[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.9/qdesignercustomwidgetinterface.html