QExtensionManager Class
La classe QExtensionManager fournit des fonctions de gestion des extensions pour Qt Widgets Designer. 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 : | 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 |
Non-membres apparentés
| T | qt_extension(QAbstractExtensionManager *manager, QObject *object) |
Macros
| Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier) |
Description détaillée
Dans Qt Widgets Designer, les extensions ne sont pas créées tant qu'elles ne sont pas nécessaires. C'est pourquoi, lorsque vous implémentez une extension, vous devez également créer une QExtensionFactory, c'est-à-dire une classe capable de créer une instance de votre extension et de l'enregistrer à l'aide du gestionnaire d'extensions de Qt Widgets Designer.
L'enregistrement d'une fabrique d'extensions se fait 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 de Qt Widgets Designer à l'aide de la fonction QDesignerFormEditorInterface::extensionManager(). Un pointeur sur l'objet QDesignerFormEditorInterface actuel de Qt Widgets Designer(formEditor dans l'exemple ci-dessus) est fourni par le paramètre de la fonction QDesignerCustomWidgetInterface::initialize(). Lorsque vous implémentez un plugin de widget personnalisé, vous devez sous-classer l'objet QDesignerCustomWidgetInterface pour exposer votre plugin à Qt Widgets Designer.
Ensuite, lorsqu'une extension est requise, le gestionnaire d'extension Qt Widgets Designer parcourt toutes les usines enregistrées en appelant QExtensionFactory::createExtension() pour chacune d'entre elles jusqu'à ce que la première usine capable de créer l'extension demandée pour l'objet sélectionné soit trouvée. Cette usine créera alors une instance de l'extension.
Il existe quatre types d'extensions disponibles dans Qt Widgets Designer: QDesignerContainerExtension, QDesignerMemberSheetExtension, QDesignerPropertySheetExtension et QDesignerTaskMenuExtension. Le comportement de Qt Widgets Designer est le même que l'extension demandée soit associée à un conteneur, à une feuille de membre, à une feuille de propriété ou à un menu de tâches.
Pour un exemple complet utilisant la classe QExtensionManager, voir l'exemple Task Menu Extension. L'exemple montre comment créer un plugin 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)
Construit un gestionnaire d'extension avec l'adresse parent.
[virtual noexcept] QExtensionManager::~QExtensionManager()
Détruit le gestionnaire d'extension
[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'objet object.
[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'identifiant factory 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'identifiant factory et l'identifiant d'extension iid.
Non-membres apparentés
template <typename T> T qt_extension(QAbstractExtensionManager *manager, QObject *object)
Renvoie l'extension de l'objet object cast vers le 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'extension donnée manager.
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 sur l'objet QDesignerFormEditorInterface (formEditor) actuel de Qt Widgets Designer est fourni par le paramètre de la fonction QDesignerCustomWidgetInterface::initialize().
Si le widget dans l'exemple ci-dessus n'a pas de QDesignerPropertySheetExtension défini, propertySheet sera un pointeur nul.
Documentation sur les macros
Q_DECLARE_EXTENSION_INTERFACE(ExtensionName, Identifier)
Associe l'adresse Identifier (une chaîne littérale) à la classe d'extension appelée ExtensionName. L'adresse Identifier doit être unique. Par exemple :
Q_DECLARE_EXTENSION_INTERFACE(MyExtension, "com.mycompany.myproduct.myextension")
L'utilisation des noms de l'entreprise et du produit est un bon moyen de garantir l'unicité de l'identifiant.
Lorsque vous implémentez une classe d'extension personnalisée, vous devez utiliser Q_DECLARE_EXTENSION_INTERFACE() pour permettre l'utilisation de la fonction qt_extension(). La macro est normalement située juste après la définition de la classe ExtensionName, dans le fichier d'en-tête associé.
Voir aussi 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.