QExtensionManager Class
QExtensionManager 类为Qt Widgets 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 Widgets Designer 中,扩展只有在被需要时才会被创建。因此,在实现一个扩展时,你必须同时创建一个QExtensionFactory ,即一个能够生成该扩展实例的类,并使用Qt Widgets 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 Widgets Designer 的扩展管理器的接口。QDesignerCustomWidgetInterface::initialize() 函数的参数会提供指向Qt Widgets Designer 当前QDesignerFormEditorInterface 对象的指针(如上例中的formEditor )。在实现自定义小部件插件时,您必须继承QDesignerCustomWidgetInterface 类,以便将您的插件暴露给Qt Widgets Designer 。
随后,当需要某个扩展时,Qt Widgets Designer 的扩展管理器将遍历所有已注册的工厂,依次调用QExtensionFactory::createExtension(),直到找到第一个能够为所选对象创建所需扩展的工厂。该工厂随后将创建该扩展的实例。
Qt Widgets Designer 中提供了四种扩展类型:QDesignerContainerExtension 、QDesignerMemberSheetExtension 、QDesignerPropertySheetExtension 和QDesignerTaskMenuExtension 。无论请求的扩展是与容器、成员表、属性表还是任务菜单相关联,Qt Widgets Designer 的行为都是一致的。
有关使用 QExtensionManager 类的完整示例,请参阅“任务菜单扩展”示例。该示例演示了如何为Qt Designer 创建自定义小部件插件,以及如何使用QDesignerTaskMenuExtension 类将自定义项目添加到Qt Widgets 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 指定的扩展。
相关非成员
template <typename T> T qt_extension(QAbstractExtensionManager *manager, QObject *object)
如果对象是类型 T(或其子类),则返回将给定的object 强制转换为类型 T 后的扩展;否则返回 0。该扩展是通过给定的扩展manager 获取的。
auto *manager = formEditor->extensionManager();
auto *propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);
if(propertySheet) {...}在实现自定义小部件插件时,QDesignerCustomWidgetInterface::initialize() 函数的参数会提供指向 `Qt Widgets Designer` 当前 `QDesignerFormEditorInterface ` 对象(`formEditor`)的指针。
如果上例中的控件未定义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()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.