Класс 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) | |
| virtual | ~QExtensionManager() |
Переопределенные открытые функции
| virtual QObject * | extension(QObject *object, const QString &iid) const override |
| virtual void | registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override |
| virtual 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.2/qextensionmanager.html