Класс QExtensionManager
Класс QExtensionManager предоставляет средства управления расширениями для Qt Designer. Подробнее...
| Заголовок: | #include <QExtensionManager> |
| CMake: | find_package(Qt6 COMPONENTS Designer REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
| qmake: | QT += designer |
| Наследует: | QObject и QAbstractExtensionManager |
Открытые функции
| QExtensionManager(QObject *parent = nullptr) | |
| виртуальный | ~QExtensionManager() |
Переопределённые открытые функции
| виртуальный QObject * | extension(QObject *object, const QString &iid) const override |
| виртуальный void | registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override |
| виртуальный void | unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override |
Связанные нечлены
| T | qt_extension(QAbstractExtensionManager *manager, QObject *object) |
Макросы
| Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier) |
Подробное описание
В Qt Designer расширения создаются только по мере необходимости. Поэтому при реализации расширения необходимо также создать QExtensionFactory, то есть класс, способный создавать экземпляр вашего расширения, и зарегистрировать его с помощью менеджера расширений Qt Designer.
Регистрация фабрики расширений обычно выполняется в функции QDesignerCustomWidgetInterface::initialize():
void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor)
{
if (initialized)
return;
QExtensionManager *manager = formEditor->extensionManager();
Q_ASSERT(manager != 0);
manager->registerExtensions(new MyExtensionFactory(manager),
Q_TYPEID(QDesignerTaskMenuExtension));
initialized = true;
} Класс QExtensionManager не предназначен для прямого создания экземпляров. Вы можете получить интерфейс к менеджеру расширений Qt Designer с помощью функции QDesignerFormEditorInterface::extensionManager(). Указатель на текущий объект QDesignerFormEditorInterface Qt Designer (formEditor в приведённом выше примере) предоставляется в качестве параметра функции QDesignerCustomWidgetInterface::initialize(). При реализации плагина пользовательского виджета необходимо наследоваться от QDesignerCustomWidgetInterface, чтобы предоставить Qt Designer доступ к вашему плагину.
Затем, когда требуется расширение, менеджер расширений Qt Designer перебирает все зарегистрированные фабрики, вызывая QExtensionFactory::createExtension() для каждой из них, пока не найдёт первую, способную создать запрашиваемое расширение для выбранного объекта. Эта фабрика затем создаст экземпляр расширения.
Существует четыре типа расширений в Qt Designer: QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension и QDesignerTaskMenuExtension. Поведение Qt Designer одинаково, независимо от того, связано ли запрашиваемое расширение с контейнером, списком членов, списком свойств или контекстным меню.
Для получения подробного примера использования класса QExtensionManager см. пример расширения контекстного меню. В примере показано, как создать плагин пользовательского виджета для Qt Designer и как использовать класс QDesignerTaskMenuExtension для добавления пользовательских элементов в контекстное меню Qt Designer.
См. также QExtensionFactory и QAbstractExtensionManager.
Документация функций-членов
QExtensionManager::QExtensionManager(QObject *parent = nullptr)
Конструирует менеджер расширений с заданным parent.
[virtual] QExtensionManager::~QExtensionManager()
Уничтожает менеджер расширений
[override virtual] QObject *QExtensionManager::extension(QObject *object, const QString &iid) const
Переопределяет: QAbstractExtensionManager::extension(QObject *object, const QString &iid) const.
Возвращает расширение, заданное iid, для данного object.
[override virtual] void QExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())
Переопределяет: QAbstractExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid).
Регистрирует расширение, заданное данной factory и идентификатором расширения iid.
[override virtual] void QExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())
Переопределяет: QAbstractExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid).
Дерегистрирует расширение, заданное данной factory и идентификатором расширения iid.
Связанные нечлены
template <typename T> T qt_extension(QAbstractExtensionManager *manager, QObject *object)
Возвращает расширение заданного object, приведённое к типу T, если объект имеет тип T (или подтип); в противном случае возвращает 0. Расширение извлекается с использованием заданного менеджера расширений manager.
QDesignerPropertySheetExtension *propertySheet;
QExtensionManager manager = formEditor->extensionManager();
propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);
if(propertySheet) {...} При реализации плагина пользовательского виджета указатель на текущий объект QDesignerFormEditorInterface Qt Designer (formEditor) предоставляется в качестве параметра функции QDesignerCustomWidgetInterface::initialize().
Если у виджета в примере выше не определено QDesignerPropertySheetExtension, propertySheet будет нулевым указателем.
Документация макросов
Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)
Связывает заданный Identifier (строковый литерал) с классом расширения ExtensionName. Identifier должен быть уникальным. Например:
Q_DECLARE_EXTENSION_INTERFACE(MyExtension, "com.mycompany.myproduct.myextension")
Использование названий компании и продукта — хороший способ обеспечить уникальность идентификатора.
При реализации пользовательского класса расширения необходимо использовать Q_DECLARE_EXTENSION_INTERFACE(), чтобы использовать функцию qt_extension(). Макрос обычно располагается сразу после определения класса ExtensionName в соответствующем файле заголовков.
См. также Q_DECLARE_INTERFACE().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qextensionmanager.html