Sur cette page

QExtensionManager Class

La classe QExtensionManager fournit des fonctionnalités de gestion des extensions pour le Concepteur d'Qt Widgets. En savoir plus...

En-tête : #include <QExtensionManager>
CMake : find_package(Qt6 REQUIRED COMPONENTS Designer)
target_link_libraries(mytarget PRIVATE Qt6::Designer)
qmake : QT += designer
Hérite de :QObject et QAbstractExtensionManager

Fonctions publiques

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

Fonctions publiques réimplémentées

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)

Macros

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

Description détaillée

Dans le Designer d'Qt Widgets, les extensions ne sont créées qu'au moment où elles sont requises. C'est pourquoi, lors de l'implémentation d'une extension, vous devez également créer une « QExtensionFactory », c'est-à-dire une classe capable de créer une instance de votre extension, puis l'enregistrer à l'aide du gestionnaire d'extensions du Designer d'Qt Widgets.

L'enregistrement d'une fabrique d'extensions s'effectue généralement dans la fonction 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;
        }

Le `QExtensionManager` n’est pas destiné à être instancié directement. Vous pouvez récupérer une interface vers le gestionnaire d'extensions d'Qt Widgets Designer à l'aide de la fonction QDesignerFormEditorInterface::extensionManager(). Un pointeur vers l'objet QDesignerFormEditorInterface actuel d'Qt Widgets Designer (formEditor dans l'exemple ci-dessus) est fourni par le paramètre de la fonction QDesignerCustomWidgetInterface::initialize(). Lors de l'implémentation d'un plugin de widget personnalisé, vous devez créer une sous-classe de QDesignerCustomWidgetInterface afin d'exposer votre plugin à Qt Widgets Designer.

Ensuite, lorsqu’une extension est requise, le gestionnaire d’extensions d’ Qt Widgets Designer parcourt toutes ses fabriques enregistrées en appelant QExtensionFactory::createExtension() pour chacune d’entre elles, jusqu’à ce qu’il trouve la première capable de créer l’extension demandée pour l’objet sélectionné. Cette fabrique créera alors une instance de l’extension.

Il existe quatre types d’extensions disponibles dans l’ Qt Widgets Designer : QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension et QDesignerTaskMenuExtension. Le comportement de l’ Qt Widgets Designer est le même, que l’extension demandée soit associée à un conteneur, à une feuille de membres, à une feuille de propriétés ou à un menu de tâches.

Pour un exemple complet utilisant la classe QExtensionManager, consultez l'exemple « Extension du menu des tâches ». Cet exemple montre comment créer un plugin de widget personnalisé pour Qt Designer, et comment utiliser la classe QDesignerTaskMenuExtension pour ajouter des éléments personnalisés au menu des tâches de Qt Widgets Designer.

Voir également QExtensionFactory et QAbstractExtensionManager.

Documentation sur les fonctions membres

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

Crée un gestionnaire d'extensions à partir de l'parent on fournie.

[virtual noexcept] QExtensionManager::~QExtensionManager()

Supprime le gestionnaire d'extensions

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

Réimplémente : ` QAbstractExtensionManager::extension(QObject *object, const QString &iid) const`.

Renvoie l'extension spécifiée par iid, pour l'object donné.

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

Réimplémente : QAbstractExtensionManager::registerExtensions(QAbstractExtensionFactory *factory, const QString &iid).

Enregistre l'extension spécifiée par l'factory fournie et l'identifiant d'extension iid.

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

Réimplémente : QAbstractExtensionManager::unregisterExtensions(QAbstractExtensionFactory *factory, const QString &iid).

Désenregistre l'extension spécifiée par l'factory fournie et l'identifiant d'extension iid.

Éléments non membres associés

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

Renvoie l'extension de l'object donné, converti en type T si l'objet est de type T (ou d'une sous-classe) ; sinon, renvoie 0. L'extension est récupérée à l'aide de l'manager d'extension fourni.

       auto *manager = formEditor->extensionManager();

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

       if(propertySheet) {...}

Lors de l’implémentation d’un plugin de widget personnalisé, un pointeur vers l’objet QDesignerFormEditorInterface actuel de l’ Qt Widgets Designer (formEditor) est fourni par le paramètre de la fonction QDesignerCustomWidgetInterface::initialize().

Si le widget de l’exemple ci-dessus ne dispose pas d’un QDesignerPropertySheetExtension défini, propertySheet sera un pointeur nul.

Documentation des macros

Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)

Associe l'Identifier donné (une chaîne littérale) à la classe d'extension nommée ExtensionName. L'Identifier doit être unique. Par exemple :

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

L'utilisation des noms de la société et du produit est un bon moyen de garantir l'unicité de l'identifiant.

Lors de l’implémentation d’une classe d’extension personnalisée, vous devez utiliser Q_DECLARE_EXTENSION_INTERFACE() pour permettre l’utilisation de la fonction qt_extension(). Cette macro se trouve généralement juste après la définition de la classe ExtensionName, dans le fichier d’en-tête associé.

Voir également 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.