QExtensionManager 类

QExtensionManager 类提供用于 Qt Designer 的扩展管理功能。 更多信息...

头文件 #include <QExtensionManager>
CMakefind_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmakeQT += designer
继承 QObjectQAbstractExtensionManager

公共函数

QExtensionManager(QObject *parent = nullptr)
virtual~QExtensionManager()

重实现公共函数

virtual QObject *extension(QObject *object, const QString &iid) const override
virtual voidregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override
virtual voidunregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString()) override
Tqt_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;

            auto *manager = formEditor->extensionManager();
            Q_ASSERT(manager != nullptr);

            manager->registerExtensions(new MyExtensionFactory(manager),
                                        Q_TYPEID(QDesignerTaskMenuExtension));

            initialized = true;
        }

QExtensionManager 不建议直接实例化。您可以使用 QDesignerFormEditorInterface::extensionManager() 函数获取对 Qt Designer 扩展管理器的接口。QDesignerCustomWidgetInterface::initialize() 函数的参数提供了一个指向 Qt Designer 当前 QDesignerFormEditorInterface 对象的指针(如上例中的 formEditor)。在实现自定义小工具插件时,必须子类化 QDesignerCustomWidgetInterface 以将您的插件暴露给 Qt Designer

如果需要扩展,Qt Designer 的扩展管理器将遍历所有已注册的工厂,对每个调用 QExtensionFactory::createExtension(),直到找到第一个能够为所选对象创建所需扩展的工厂。然后将创建扩展的实例。

Qt Designer 中有四种可用的扩展类型: QDesignerContainerExtensionQDesignerMemberSheetExtensionQDesignerPropertySheetExtensionQDesignerTaskMenuExtension。《Qt Designer》的行为与请求的扩展关联的是容器、成员表单、属性表单还是任务菜单无关。

关于使用 QExtensionManager 类的完整示例,请参阅 任务菜单扩展示例。示例演示了如何为 Qt Designer 创建自定义小部件插件,以及如何使用 QDesignerTaskMenuExtension 类将自定义项添加到 Qt Designer 的任务菜单中。

另请参阅 QExtensionFactoryQAbstractExtensionManager

成员函数文档

[explicit] QExtensionManager::QExtensionManager(QObject *parent = nullptr)

使用给定的 parent 构造扩展管理器。

[virtual noexcept] 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

相关非成员函数

模板 <typename T> T qt_extension(QAbstractExtensionManager *manager, QObject *object)

如果给定的 object 是类型 T(或其子类),则返回将其转换为类型 T 的扩展;否则返回 0。扩展是通过给定的扩展 manager 获取的。

       auto *manager = formEditor->extensionManager();

       auto *propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);

       if(propertySheet) {...}

在实现自定义小部件插件时,通过 QDesignerCustomWidgetInterface::initialize() 函数的参数提供了一个指向 Qt Designer 当前 QDesignerFormEditorInterface 对象的指针(formEditor)。

如果上述示例中的小部件没有定义 QDesignerPropertySheetExtension,则 propertySheet 将是一个空指针。

宏文档

Q_DECLARE_EXTENSION_INTERFACE(extensionName, identifier)

将给定的 identifier(一个字符串字面量)与名为 extensionName 的扩展类关联。标识符必须是唯一的。例如

   Q_DECLARE_EXTENSION_INTERFACE(MyExtension, "com.mycompany.myproduct.myextension")

使用公司名称和产品名称是确保标识符唯一性的好方法。

在实现自定义扩展类时,您必须使用 Q_DECLARE_EXTENSION_INTERFACE() 来启用使用 qt_extension() 函数。该宏通常位于与 extensionName 关联的头部文件中类定义之后。

另请参阅 Q_DECLARE_INTERFACE

© 2024 Qt 公司有限公司。本文件中的文档贡献是各自所有者的版权。本文件中的文档是在自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款下提供的。Qt 和相应的商标是芬兰的 Qt 公司及其在全球的子公司及其他机构的商标。所有其他商标均是各自所有者的财产。