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 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 ().
Returns the extension manager for the extension factory.