QDesignerContainerExtension Class
La classe QDesignerContainerExtension vous permet d'ajouter des pages à un conteneur multi-pages personnalisé dans l'espace de travail de Qt Widgets Designer. Plus d'informations...
| En-tête : | #include <QDesignerContainerExtension> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Designer)target_link_libraries(mytarget PRIVATE Qt6::Designer) |
| qmake : | QT += designer |
Fonctions publiques
| virtual | ~QDesignerContainerExtension() |
| virtual void | addWidget(QWidget *page) = 0 |
| virtual bool | canAddWidget() const = 0 |
| virtual bool | canRemove(int index) const = 0 |
| virtual int | count() const = 0 |
| virtual int | currentIndex() const = 0 |
| virtual void | insertWidget(int index, QWidget *page) = 0 |
| virtual void | remove(int index) = 0 |
| virtual void | setCurrentIndex(int index) = 0 |
| virtual QWidget * | widget(int index) const = 0 |
Description détaillée
Qt Widgets Designer montrant l'option d'insertion d'une page avant la page actuelle dans un objet." src="images/containerextension-example.webp" title="Capture d'écran de l'éditeur d'interface utilisateur de Qt Widgets Designer montrant l'option d'insertion d'une page avant la page actuelle dans un objet."/>
QDesignerContainerExtension fournit une interface pour la création d'extensions de conteneurs personnalisées. Une extension de conteneur consiste en une collection de fonctions dont Qt Widgets Designer a besoin pour gérer un plugin de conteneur multi-pages, et une liste des pages du conteneur.
Attention : Il ne s'agit pas d'une extension pour les plugins de conteneurs en général, mais uniquement pour les conteneurs multi-pages personnalisés.
Pour créer une extension de conteneur, votre classe d'extension doit hériter à la fois de QObject et de QDesignerContainerExtension. Par exemple :
class MyContainerExtension : public QObject, public QDesignerContainerExtension { Q_OBJECT Q_INTERFACES(QDesignerContainerExtension) public: MyContainerExtension(MyCustomWidget *widget, QObject *parent = 0); int count() const; QWidget *widget(int index) const; int currentIndex() const; void setCurrentIndex(int index); void addWidget(QWidget *widget); void insertWidget(int index, QWidget *widget); void remove(int index); private: MyCustomWidget *myWidget; };
Puisque nous mettons en œuvre une interface, nous devons nous assurer qu'elle est connue du système de métaobjets à l'aide de la macro Q_INTERFACES(). Cela permet à Qt Widgets Designer d'utiliser la fonction qobject_cast() pour rechercher les interfaces prises en charge en n'utilisant rien d'autre qu'un pointeur QObject.
Vous devez réimplémenter plusieurs fonctions pour permettre à Qt Widgets Designer de gérer un widget conteneur multi-pages personnalisé : Qt Widgets Designer utilise count() pour garder une trace du nombre de pages dans votre conteneur, widget() pour retourner la page à un index donné dans la liste des pages du conteneur, et currentIndex() pour retourner l'index de la liste de la page sélectionnée. Qt Widgets Designer utilise la fonction addWidget() pour ajouter une page donnée au conteneur, s'attendant à ce qu'elle soit ajoutée à la liste des pages, tandis qu'il s'attend à ce que la fonction insertWidget() ajoute une page donnée au conteneur en l'insérant à un index donné.
Dans Qt Widgets Designer, les extensions ne sont pas créées tant qu'elles ne sont pas nécessaires. C'est pourquoi vous devez également créer une classe QExtensionFactory, c'est-à-dire une classe capable de créer une instance de votre extension, et l'enregistrer à l'aide de la fonction extension manager de Qt Widgets Designer.
Lorsqu'une extension de conteneur est requise, Qt Widgets Designer's extension manager 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 une extension de conteneur soit trouvée. Cette usine créera alors l'extension pour le plugin.
Il existe quatre types d'extensions disponibles sur 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 multipage, à une feuille de membre, à une feuille de propriété ou à un menu de tâches.
La classe QExtensionFactory fournit une fabrique d'extensions standard et peut également être utilisée comme interface pour des fabriques d'extensions personnalisées. Vous pouvez soit créer un nouveau QExtensionFactory et réimplémenter la fonction QExtensionFactory::createExtension(). Par exemple :
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; }
Ou vous pouvez utiliser une fabrique existante, en étendant la fonction QExtensionFactory::createExtension() pour que la fabrique puisse également créer une extension de conteneur. Par exemple :
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; } }
Pour un exemple complet utilisant la classe QDesignerContainerExtension, voir l'exemple Container Extension. L'exemple montre comment créer un plugin multi-pages personnalisé pour Qt Widgets Designer.
Voir également QExtensionFactory, QExtensionManager, et Création d'extensions de widgets personnalisés.
Documentation des fonctions membres
[virtual constexpr noexcept] QDesignerContainerExtension::~QDesignerContainerExtension()
Détruit l'extension.
[pure virtual] void QDesignerContainerExtension::addWidget(QWidget *page)
Ajoute le site page au conteneur en l'ajoutant à la liste des pages de l'extension.
Voir aussi insertWidget(), remove() et widget().
[pure virtual] bool QDesignerContainerExtension::canAddWidget() const
Indique si un widget peut être ajouté. Cela détermine si les options du menu contextuel permettant d'ajouter ou d'insérer des pages sont activées.
Ce paramètre doit renvoyer false pour les conteneurs qui ont une seule page fixe, par exemple QScrollArea ou QDockWidget.
Voir également addWidget() et canRemove().
[pure virtual] bool QDesignerContainerExtension::canRemove(int index) const
Indique si le widget situé à l'adresse index peut être supprimé. Cela détermine si l'option du menu contextuel permettant de supprimer la page actuelle est activée.
Il faut renvoyer false pour les conteneurs qui ont une seule page fixe, par exemple QScrollArea ou QDockWidget.
Voir également remove() et canAddWidget().
[pure virtual] int QDesignerContainerExtension::count() const
Renvoie le nombre de pages dans le conteneur.
[pure virtual] int QDesignerContainerExtension::currentIndex() const
Renvoie l'index de la page sélectionnée dans le conteneur.
Voir également setCurrentIndex().
[pure virtual] void QDesignerContainerExtension::insertWidget(int index, QWidget *page)
Ajoute la page page au conteneur en l'insérant à la page index dans la liste des pages de l'extension.
Voir aussi addWidget(), remove() et widget().
[pure virtual] void QDesignerContainerExtension::remove(int index)
Supprime la page située à l'adresse index de la liste des pages de l'extension.
Voir aussi addWidget() et insertWidget().
[pure virtual] void QDesignerContainerExtension::setCurrentIndex(int index)
Définit la page actuellement sélectionnée dans le conteneur comme étant la page située à l'adresse index dans la liste des pages de l'extension.
Voir aussi currentIndex().
[pure virtual] QWidget *QDesignerContainerExtension::widget(int index) const
Renvoie la page à l'adresse index dans la liste des pages de l'extension.
Voir aussi addWidget() et insertWidget().
© 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.