QExtensionFactory 类

QExtensionFactory 类允许您在 Qt Designer 中创建一个能够创建自定义扩展实例的工厂。 更多信息...

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

公共函数

QExtensionFactory(QExtensionManager *parent = nullptr)
QExtensionManager *extensionManager() const

重 implemented 公共函数

虚拟 QObject *extension(QObject *object, const QString &iid) const override

受保护的函数

虚拟 QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const

详细描述

Qt Designer 中,扩展只有在需要时才创建。因此,在实现自定义扩展时,您还必须创建一个 QExtensionFactory,即一个能够创建您的扩展实例的类,并通过 Qt Designerextension manager 进行注册。

QExtensionManager 类为 Qt Designer 提供了扩展管理功能。当一个扩展需要时,Qt Designer 的 extension manager 将运行其所有已注册的工厂,并对每个 QExtensionFactory::createExtension() 进行调用,直到找到第一个能够为所选对象创建所需扩展的工厂。然后,该工厂将创建一个扩展实例。

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

您可以选择创建一个新的 QExtensionFactory 并重新实现 QExtensionFactory::createExtension() 函数。例如

        QObject *ANewExtensionFactory::createExtension(QObject *object,
                const QString &iid, QObject *parent) const
        {
            if (iid != Q_TYPEID(QDesignerContainerExtension))
                return nullptr;

            if (auto *widget = qobject_cast<MyCustomWidget*>(object))
                return new MyContainerExtension(widget, parent);

            return nullptr;
        }

或者您可以使用现有的工厂,扩展 QExtensionFactory::createExtension() 函数,使工厂能够创建您的扩展。例如

        QObject *AGeneralExtensionFactory::createExtension(QObject *object,
                const QString &iid, QObject *parent) const
        {
            auto *widget = qobject_cast<MyCustomWidget*>(object);
            if (!widget)
                return nullptr;

            if (iid == Q_TYPEID(QDesignerTaskMenuExtension))
                return new MyTaskMenuExtension(widget, parent);

            if (iid == Q_TYPEID(QDesignerContainerExtension))
                return new MyContainerExtension(widget, parent);

            return nullptr;
        }

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

另请参阅QExtensionManagerQAbstractExtensionFactory

成员函数文档

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

使用指定的parent构造扩展工厂。

[虚拟受保护] QObject *QExtensionFactory::createExtension(QObject *object, const QString &iid, QObject *parent) const

为给定的object创建指定的扩展。扩展对象被创建为指定parent的子对象。

另请参阅extension

[覆盖虚拟] QObject *QExtensionFactory::extension(QObject *object, const QString &iid) const

重实现了:QAbstractExtensionFactory::extension(QObject *object, const QString &iid) const.

返回指定的扩展对象。

另请参阅createExtension

QExtensionManager *QExtensionFactory::extensionManager() const

返回扩展工厂的扩展管理器。

© 2024 The Qt Company Ltd. 本文档中的贡献文档的版权属于其各自的所有者。本提供的文档是根据自由软件基金会发布的GNU自由文档许可协议版本1.3许可的。Qt及其商标是The Qt Company Ltd.在芬兰和/或其他国家的商标。所有其他商标均为各自所有者的财产。