Spec-Zone.ru › Qt 5.14

Класс QExtensionManager

Класс QExtensionManager предоставляет средства управления расширениями для Qt Designer. Подробнее...

Заголовок: #include <QExtensionManager>
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.

Связанные нечлены

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-5.14/qextensionmanager.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API