Auf dieser Seite

QExtensionManager Class

Die Klasse „QExtensionManager“ bietet Funktionen zur Verwaltung von Erweiterungen für den „ Qt Widgets -Designer“. Mehr...

Header: #include <QExtensionManager>
CMake: find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake: QT += designer
Erbt von:QObject und QAbstractExtensionManager

Öffentliche Funktionen

QExtensionManager(QObject *parent = nullptr)
virtual ~QExtensionManager()

Neu implementierte öffentliche Funktionen

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)

Makros

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

Ausführliche Beschreibung

Im „ Qt Widgets Designer“ werden die Erweiterungen erst dann erstellt, wenn sie benötigt werden. Aus diesem Grund müssen Sie bei der Implementierung einer Erweiterung auch eine „ QExtensionFactory “ erstellen, d. h. eine Klasse, die eine Instanz Ihrer Erweiterung erstellen kann, und diese über den Erweiterungsmanager des „ Qt Widgets Designers“ registrieren.

Die Registrierung einer Erweiterungsfabrik erfolgt in der Regel in der Funktion ` 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;
        }

Der `QExtensionManager` ist nicht dafür vorgesehen, direkt instanziiert zu werden. Sie können über die Funktion ` QDesignerFormEditorInterface::extensionManager()` eine Schnittstelle zum Erweiterungsmanager des „ Qt Widgets “-Designers abrufen. Ein Zeiger auf das aktuelle ` QDesignerFormEditorInterface `-Objekt des „ Qt Widgets “-Designers (im obigen Beispiel `formEditor `) wird über den Parameter der Funktion ` QDesignerCustomWidgetInterface::initialize()` bereitgestellt. Bei der Implementierung eines benutzerdefinierten Widget-Plugins müssen Sie eine Unterklasse von ` QDesignerCustomWidgetInterface ` erstellen, um Ihr Plugin dem „ Qt Widgets “-Designer zur Verfügung zu stellen.

Wenn dann eine Erweiterung benötigt wird, durchläuft der Erweiterungsmanager des „ Qt Widgets “-Designers alle registrierten Fabriken und ruft für jede davon die Methode ` QExtensionFactory::createExtension()` auf, bis die erste gefunden wird, die in der Lage ist, die angeforderte Erweiterung für das ausgewählte Objekt zu erstellen. Diese Fabrik erstellt dann eine Instanz der Erweiterung.

Im „ Qt Widgets Designer“ stehen vier Arten von Erweiterungen zur Verfügung: „ QDesignerContainerExtension “, „ QDesignerMemberSheetExtension “, „ QDesignerPropertySheetExtension “ und „ QDesignerTaskMenuExtension “. Das Verhalten des „ Qt Widgets Designers“ ist unabhängig davon, ob die angeforderte Erweiterung mit einem Container, einem Member-Sheet, einem Property-Sheet oder einem Aufgabenmenü verknüpft ist.

Ein vollständiges Beispiel für die Verwendung der Klasse `QExtensionManager` finden Sie im Beispiel „Task Menu Extension“. Das Beispiel zeigt, wie Sie ein benutzerdefiniertes Widget-Plugin für „ Qt Designer “ erstellen und wie Sie mithilfe der Klasse ` QDesignerTaskMenuExtension ` benutzerdefinierte Elemente zum Aufgabenmenü des „ Qt Widgets Designer“ hinzufügen.

Siehe auch „ QExtensionFactory “ und „ QAbstractExtensionManager “.

Dokumentation zu den Member-Funktionen

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

Erstellt einen Erweiterungsmanager mit dem angegebenen „ parent “.

[virtual noexcept] QExtensionManager::~QExtensionManager()

Löscht den Erweiterungsmanager

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

Implementiert: QAbstractExtensionManager::extension(QObject *object, const QString &iid) const.

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

[override virtual] void QExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())

Implementiert: ` QAbstractExtensionManager::registerExtensions` (`QAbstractExtensionFactory *factory, const QString &iid`).

Registriert die durch die angegebene ` factory ` und die Erweiterungskennung ` iid` angegebene Erweiterung.

[override virtual] void QExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid = QString())

Implementiert: QAbstractExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid).

Hebt die Registrierung der durch die angegebene ` factory ` und die Erweiterungskennung ` iid` angegebenen Erweiterung auf.

Verwandte Nicht-Mitglieder

template <typename T> T qt_extension(QAbstractExtensionManager *manager, QObject *object)

Gibt die Erweiterung des angegebenen object zurück, das in den Typ T umgewandelt wurde, sofern das Objekt vom Typ T (oder einer Unterklasse) ist; andernfalls wird 0 zurückgegeben. Die Erweiterung wird mithilfe des angegebenen extension manager abgerufen.

       auto *manager = formEditor->extensionManager();

       auto *propertySheet = qt_extension<QDesignerPropertySheetExtension*>(manager, widget);

       if(propertySheet) {...}

Bei der Implementierung eines benutzerdefinierten Widget-Plugins wird ein Zeiger auf das aktuelle QDesignerFormEditorInterface -Objekt des Qt Widgets -Designers (formEditor) über den Parameter der Funktion QDesignerCustomWidgetInterface::initialize() bereitgestellt.

Wenn das Widget im obigen Beispiel kein definiertes ` QDesignerPropertySheetExtension` hat, ist ` propertySheet ` ein Null-Zeiger.

Makro-Dokumentation

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

Ordnet den angegebenen „ Identifier “ (ein Zeichenfolgenliteral) der Erweiterungsklasse „ ExtensionName “ zu. Der „ Identifier “ muss eindeutig sein. Beispiel:

   Q_DECLARE_EXTENSION_INTERFACE(MyExtension, "com.mycompany.myproduct.myextension")

Die Verwendung von Firmen- und Produktnamen ist eine gute Möglichkeit, die Eindeutigkeit des Identifikators sicherzustellen.

Bei der Implementierung einer benutzerdefinierten Erweiterungsklasse müssen Sie Q_DECLARE_EXTENSION_INTERFACE() verwenden, um die Verwendung der Funktion ` qt_extension()` zu ermöglichen. Das Makro befindet sich normalerweise direkt nach der Klassendefinition für ` ExtensionName` in der zugehörigen Header-Datei.

Siehe auch ` 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.