QExtensionFactory Class

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

头: #include <QExtensionFactory>
qmake: QT += designer
继承: QObject and QAbstractExtensionFactory

公共函数

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

重实现公共函数

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

保护函数

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

额外继承成员

详细描述

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

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 .

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 和重实现 QExtensionFactory::createExtension () 函数。例如:

        QObject *ANewExtensionFactory::createExtension(QObject *object,
                const QString &iid, QObject *parent) const
        {
            if (iid != Q_TYPEID(QDesignerContainerExtension))
                return 0;
            if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>
                   (object))
                return new MyContainerExtension(widget, parent);
            return 0;
        }
					

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
        {
            MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object);
            if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
                return new MyTaskMenuExtension(widget, parent);
            } else if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) {
                return new MyContainerExtension(widget, parent);
            } else {
                return 0;
            }
        }
					

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 to use the QDesignerTaskMenuExtension class to add custom items to Qt Designer's task menu.

另请参阅 QExtensionManager and QAbstractExtensionFactory .

成员函数文档编制

QExtensionFactory:: QExtensionFactory ( QExtensionManager * parent = Q_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 ().

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

重实现自 QAbstractExtensionFactory::extension ().

Returns the extension specified by iid 为给定 object .

另请参阅 createExtension ().

QExtensionManager *QExtensionFactory:: extensionManager () const

Returns the extension manager for the extension factory.