QExtensionFactory Class

Mit der Klasse QExtensionFactory können Sie eine Fabrik erstellen, die Instanzen von benutzerdefinierten Erweiterungen in Qt Designer erzeugen kann. Mehr...

Kopfzeile: #include <QExtensionFactory>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
Erbt: QObject und QAbstractExtensionFactory

Öffentliche Funktionen

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

Reimplementierte öffentliche Funktionen

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

Geschützte Funktionen

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

Detaillierte Beschreibung

In Qt Widgets Designer werden die Erweiterungen erst erstellt, wenn sie benötigt werden. Aus diesem Grund müssen Sie bei der Implementierung einer benutzerdefinierten Erweiterung auch eine QExtensionFactory erstellen, d.h. eine Klasse, die in der Lage ist, eine Instanz Ihrer Erweiterung zu erzeugen, und diese mit Qt Widgets Designer's extension manager registrieren.

Die Klasse QExtensionManager bietet Möglichkeiten zur Verwaltung von Erweiterungen für Qt Widgets Designer. Wenn eine Erweiterung benötigt wird, durchläuft Qt Designer's extension manager alle registrierten Fabriken und ruft QExtensionFactory::createExtension() für jede auf, bis die erste gefunden wird, die in der Lage ist, eine angeforderte Erweiterung für das ausgewählte Objekt zu erstellen. Diese Fabrik wird dann eine Instanz der Erweiterung erstellen.

Es gibt vier Arten von Erweiterungen in Qt Widgets Designer: QDesignerContainerExtension QDesignerMemberSheetExtension , QDesignerPropertySheetExtension und QDesignerTaskMenuExtension. Qt Designer verhält sich gleich, unabhängig davon, ob die angeforderte Erweiterung mit einem mehrseitigen Container, einem Mitgliederblatt, einem Eigenschaftsblatt oder einem Aufgabenmenü verbunden ist.

Sie können entweder eine neue QExtensionFactory erstellen und die Funktion QExtensionFactory::createExtension() neu implementieren. Zum Beispiel:

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

Oder Sie können eine bestehende Factory verwenden und die Funktion QExtensionFactory::createExtension() erweitern, damit die Factory auch Ihre Erweiterung erstellen kann. Ein Beispiel:

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

Ein vollständiges Beispiel für die Verwendung der Klasse QExtensionFactory finden Sie im Beispiel Taskmenü-Erweiterung. Das Beispiel zeigt, wie man ein benutzerdefiniertes Widget-Plugin für Qt Designer erstellt und wie man die Klasse QDesignerTaskMenuExtension verwendet, um benutzerdefinierte Elemente zum Aufgabenmenü von Qt Widgets Designer hinzuzufügen.

Siehe auch QExtensionManager und QAbstractExtensionFactory.

Dokumentation der Mitgliedsfunktionen

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

Konstruiert eine Erweiterungsfabrik mit der angegebenen parent.

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

Erzeugt eine durch iid spezifizierte Erweiterung für die angegebene object. Das Erweiterungsobjekt wird als Kind des angegebenen parent erstellt.

Siehe auch extension().

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

Reimplements: QAbstractExtensionFactory::extension(QObject *object, const QString &iid) const.

Gibt die von iid angegebene Erweiterung für das angegebene object zurück.

Siehe auch createExtension().

QExtensionManager *QExtensionFactory::extensionManager() const

Gibt den Erweiterungsmanager für die Erweiterungsfabrik zurück.

© 2025 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.