QExtensionManager 类
QExtensionManager 类提供用于 Qt Designer 的扩展管理功能。 更多信息...
头文件 | #include <QExtensionManager> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Designer) 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; 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 中有四种可用的扩展类型: QDesignerContainerExtension、QDesignerMemberSheetExtension、QDesignerPropertySheetExtension 和 QDesignerTaskMenuExtension。《Qt Designer》的行为与请求的扩展关联的是容器、成员表单、属性表单还是任务菜单无关。
关于使用 QExtensionManager 类的完整示例,请参阅 任务菜单扩展示例。示例演示了如何为 Qt Designer 创建自定义小部件插件,以及如何使用 QDesignerTaskMenuExtension 类将自定义项添加到 Qt Designer 的任务菜单中。
另请参阅 QExtensionFactory 和 QAbstractExtensionManager。
成员函数文档
[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 公司及其在全球的子公司及其他机构的商标。所有其他商标均是各自所有者的财产。