QExtensionFactory Class

The QExtensionFactory class allows you to create a factory that is able to make instances of custom extensions in Qt Designer. 更多...

头: #include <QExtensionFactory>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
继承: QObject and QAbstractExtensionFactory

公共函数

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

重实现公共函数

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

保护函数

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

详细描述

Qt Designer the extensions are not created until they are required. For that reason, when implementing a custom extension, you must also create a QExtensionFactory, i.e. a class that is able to make an instance of your extension, and register it using Qt Designer 's extension manager .

The QExtensionManager class provides extension management facilities for Qt Designer . When an extension is required, Qt Designer's extension manager will run through all its registered factories calling QExtensionFactory::createExtension () for each until the first one that is able to create a requested extension for the selected object, is found. This factory will then make an instance of the extension.

There are four available types of extensions in Qt Designer : QDesignerContainerExtension , QDesignerMemberSheetExtension , QDesignerPropertySheetExtension and QDesignerTaskMenuExtension . Qt Designer's behavior is the same whether the requested extension is associated with a multi page container, a member sheet, a property sheet or a task menu.

You can either create a new QExtensionFactory and reimplement the 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;
        }
					

Or you can use an existing factory, expanding the QExtensionFactory::createExtension () function to make the factory able to create your extension as well. For example:

        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;
        }
					

For a complete example using the QExtensionFactory class, see the Task Menu Extension example . The example shows how to create a custom widget plugin for Qt Designer, and how to use the QDesignerTaskMenuExtension class to add custom items to Qt Designer 's task menu.

另请参阅 QExtensionManager and QAbstractExtensionFactory .

成员函数文档编制

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

Constructs an extension factory with the given parent .

[virtual protected] QObject *QExtensionFactory:: createExtension ( QObject * object , const QString & iid , QObject * parent ) const

Creates an extension specified by iid 为给定 object . The extension object is created as a child of the specified parent .

另请参阅 extension ().

[override virtual] QObject *QExtensionFactory:: extension ( QObject * object , const QString & iid ) const

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

Returns the extension specified by iid 为给定 object .

另请参阅 createExtension ().

QExtensionManager *QExtensionFactory:: extensionManager () const

Returns the extension manager for the extension factory.