Création d’extensions de widgets personnalisés
Une fois que vous disposez d’un plugin de widget personnalisé pour Qt Widgets Designer, vous pouvez lui attribuer le comportement et les fonctionnalités attendus au sein de l’espace de travail d’ Qt Widgets Designer, à l’aide d’extensions de widgets personnalisées.
Types d’extensions
Plusieurs types d’extensions sont disponibles dans Qt Widgets Designer. Vous pouvez utiliser toutes ces extensions selon le même modèle, en remplaçant simplement la classe de base de l’extension correspondante.
QDesignerContainerExtension est nécessaire lors de l’implémentation d’un conteneur multipages personnalisé.
![]() | QDesignerTaskMenuExtension QDesignerTaskMenuExtension est utile pour les widgets personnalisés. Elle fournit une extension qui vous permet d’ajouter des entrées de menu personnalisées au menu des tâches d’ Qt Widgets Designer. L'exemple « Extension du menu des tâches » illustre comment utiliser cette classe. |
![]() | QDesignerContainerExtension QDesignerContainerExtension est nécessaire lors de l'implémentation d'un conteneur multipages personnalisé. Elle fournit une extension qui vous permet d'ajouter et de supprimer des pages pour un plugin de conteneur multipages dans Qt Widgets Designer. L'exemple « Extension de conteneur » explique plus en détail comment utiliser cette classe. Remarque : il n’est pas possible d’ajouter des propriétés personnalisées par page pour certains widgets (par exemple, QTabWidget) en raison de leur mode d’implémentation. |
![]() | QDesignerMemberSheetExtension La classe ` QDesignerMemberSheetExtension ` vous permet de manipuler les fonctions membres d'un widget affichées lors de la connexion des signaux et des slots. |
![]() | QDesignerPropertySheetExtension, QDesignerDynamicPropertySheetExtension Ces classes d'extension vous permettent de contrôler la manière dont les propriétés d'un widget s'affichent dans l'éditeur de propriétés d'Qt Widgets Designer. |
Qt Widgets Designer utilise les classes ` QDesignerPropertySheetExtension ` et ` QDesignerMemberSheetExtension ` pour alimenter ses éditeurs de propriétés, de signaux et de slots. Chaque fois qu’un widget est sélectionné dans son espace de travail, Designer d’ Qt Widgets recherche l’extension de la feuille de propriétés du widget ; de même, chaque fois qu’une connexion entre deux widgets est demandée, Designer d’ Qt Widgets recherche les extensions des feuilles de membres des widgets.
Avertissement : tous les widgets disposent de feuilles de propriétés et de membres par défaut. Si vous implémentez des extensions personnalisées pour les feuilles de propriétés ou de membres, vos extensions personnalisées remplaceront les feuilles par défaut.
Création d’une extension
Pour créer une extension, vous devez hériter à la fois de ` QObject ` et de la classe de base appropriée, puis réimplémenter ses fonctions. Puisque nous implémentons une interface, nous devons nous assurer qu’elle est signalée au système de méta-objets à l’aide de la macro ` Q_INTERFACES()` dans la définition de la classe d’extension. Par exemple :
class MyExtension: public QObject,
public QDesignerContainerExtension
{
Q_OBJECT
Q_INTERFACE(QDesignerContainerExtension)
...
}Cela permet à Qt Widgets Designer d’utiliser la fonction qobject_cast() pour rechercher les interfaces prises en charge à l’aide d’un pointeur QObject uniquement.
Exposition d’une extension à Qt Widgets Designer
Dans Qt Widgets Designer, les extensions ne sont créées qu’au moment où elles sont requises. C’est pourquoi, lors de l’implémentation d’extensions, vous devez créer une sous-classe de ` QExtensionFactory ` afin de générer des instances de vos extensions. Vous devez également enregistrer votre fabrique auprès du gestionnaire d’extensions de Qt Widgets Designer ; ce dernier se charge de la construction des extensions.
Lorsqu'une extension est demandée, le gestionnaire d'extensions d'Qt Widgets Designer parcourt les fabriques enregistrées en appelant ` QExtensionFactory::createExtension()` pour chacune d'entre elles jusqu'à ce qu'il trouve celle capable de créer l'extension demandée pour le widget sélectionné. Cette fabrique créera alors une instance de l'extension.

Création d’une fabrique d’extensions
La classe ` QExtensionFactory ` fournit une fabrique d’extensions standard, mais elle peut également servir d’interface pour des fabriques d’extensions personnalisées.
L’objectif est de réimplémenter la fonction QExtensionFactory::createExtension(), afin qu’elle puisse créer votre extension, telle qu’une extension de conteneur MultiPageWidget.
Vous pouvez soit créer une nouvelle classe ` QExtensionFactory ` et réimplémenter la fonction ` QExtensionFactory::createExtension()` :
QObject *ANewExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
if (iid != Q_TYPEID(QDesignerContainerExtension))
return 0;
if (MyCustomWidget *widget = qobject_cast<MyCustomWidget*>
(object))
return new MyContainerExtension(widget, parent);
return 0;
}soit d’utiliser une fabrique existante, en étendant la fonction ` QExtensionFactory::createExtension()` afin de permettre à la fabrique de créer également votre extension personnalisée :
QObject *AGeneralExtensionFactory::createExtension(QObject *object,
const QString &iid, QObject *parent) const
{
MyCustomWidget *widget = qobject_cast<MyCustomWidget*>(object);
if (widget && (iid == Q_TYPEID(QDesignerTaskMenuExtension))) {
return new MyTaskMenuExtension(widget, parent);
} else if (widget && (iid == Q_TYPEID(QDesignerContainerExtension))) {
return new MyContainerExtension(widget, parent);
} else {
return 0;
}
}Accéder au gestionnaire d’extensions de l’ Qt Widgets Designer
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. Ce point est abordé plus en détail dans la section Création de widgets personnalisés pour Qt Widgets Designer. L’enregistrement d’une factory d’extension s’effectue généralement dans la fonction ` QDesignerCustomWidgetInterface::initialize()` :
void MyPlugin::initialize(QDesignerFormEditorInterface *formEditor)
{
if (initialized)
return;
QExtensionManager *manager = formEditor->extensionManager();
Q_ASSERT(manager != 0);
manager->registerExtensions(new MyExtensionFactory(manager),
Q_TYPEID(QDesignerTaskMenuExtension));
initialized = true;
}Le paramètre ` formEditor ` de la fonction ` QDesignerCustomWidgetInterface::initialize()` est un pointeur vers l’objet ` QDesignerFormEditorInterface ` actuel de Qt Widgets Designer. Vous devez utiliser la fonction ` QDesignerFormEditorInterface::extensionManager()` pour récupérer une interface vers le gestionnaire d’extensions de Qt Widgets Designer. Vous utilisez ensuite la fonction ` QExtensionManager::registerExtensions()` pour enregistrer votre fabrique d’extensions personnalisée.
Exemples associés
Pour plus d'informations sur la création d'extensions de widgets personnalisées dans le Designer d'Qt Widgets, reportez-vous aux exemples « Extension du menu des tâches » et « Extension de conteneur ».
© 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.



