QDesignerContainerExtension Class
La classe `QDesignerContainerExtension` vous permet d'ajouter des pages à un conteneur multipages personnalisé dans l'espace de travail d'Qt Widgets Designer. En savoir plus...
| En-tête : | #include <QDesignerContainerExtension> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Designer) target_link_libraries(mytarget PRIVATE Qt6::Designer) |
| qmake : | QT += designer |
Fonctions publiques
| QDesignerContainerExtension() | |
| QDesignerContainerExtension(const QDesignerContainerExtension &) | |
| QDesignerContainerExtension(QDesignerContainerExtension &&) | |
| 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 |
| QDesignerContainerExtension & | operator=(QDesignerContainerExtension &&) |
| QDesignerContainerExtension & | operator=(const QDesignerContainerExtension &) |
Description détaillée
Qt Widgets Designer montrant l'option permettant d'insérer une page avant la page actuelle dans un objet" src="images/containerextension-example.webp" title="Capture d'écran de l'éditeur d'interface utilisateur Qt Widgets Designer montrant l'option permettant d'insérer une page avant la page actuelle dans un objet"/>
QDesignerContainerExtension fournit une interface permettant de créer des extensions de conteneur personnalisées. Une extension de conteneur se compose d'un ensemble de fonctions dont Qt Widgets Designer a besoin pour gérer un plugin de conteneur multipages, ainsi que d'une liste des pages du conteneur.
Avertissement : il ne s'agit pas d'une extension pour les plugins de conteneur en général, mais uniquement pour les conteneurs multipages 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;
};Comme 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()`. Cela permet à Qt Widgets Designer d’utiliser la fonction ` qobject_cast()` pour rechercher les interfaces prises en charge à l’aide d’un simple pointeur ` QObject `.
Vous devez réimplémenter plusieurs fonctions pour permettre à Qt Widgets Designer de gérer un widget conteneur multipages personnalisé : Qt Widgets Designer utilise count() pour suivre le nombre de pages de votre conteneur, widget() pour renvoyer la page correspondant à un index donné dans la liste des pages du conteneur, et currentIndex() pour renvoyer l’index de la page sélectionnée. Qt Widgets Designer utilise la fonction addWidget() pour ajouter une page donnée au conteneur, en s’attendant à ce qu’elle soit ajoutée à la fin de 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 Designer d’ Qt Widgets, les extensions ne sont créées qu’au moment où elles sont requises. 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 méthode extension manager de Designer d’ Qt Widgets.
Lorsqu’une extension de conteneur est requise, la méthode ` extension manager ` de Qt Widgets Designer parcourt toutes les fabriques enregistrées en appelant ` QExtensionFactory::createExtension()` pour chacune d’entre elles, jusqu’à ce que la première capable de créer une extension de conteneur soit trouvée. Cette fabrique créera alors l’extension pour le plugin.
Il existe quatre types d’extensions disponibles dans Qt Widgets Designer : `QDesignerContainerExtension`, ` QDesignerMemberSheetExtension`, ` QDesignerPropertySheetExtension ` et ` QDesignerTaskMenuExtension`. Le comportement d’ Qt Widgets Designer est le même, que l’extension demandée soit associée à un conteneur multipages, à une feuille de membres, à une feuille de propriétés ou à un menu de tâches.
La classe ` QExtensionFactory ` fournit une fabrique d’extensions standard et peut également servir d’interface pour des fabriques d’extensions personnalisées. Vous pouvez soit créer une nouvelle instance de ` 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 bien vous pouvez utiliser une fabrique existante, en étendant la fonction ` QExtensionFactory::createExtension()` afin 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`, consultez l’exemple « Container Extension ». Cet exemple montre comment créer un plugin multipages personnalisé pour Qt Widgets Designer.
Voir également QExtensionFactory, QExtensionManager et Création d’extensions de widgets personnalisées.
Documentation sur les fonctions membres
[constexpr noexcept default] QDesignerContainerExtension::QDesignerContainerExtension()
Construit par défaut une instance de ` QDesignerContainerExtension`.
[delete] QDesignerContainerExtension::QDesignerContainerExtension(const QDesignerContainerExtension &)
Copie et construit une instance de ` QDesignerContainerExtension`. Cette fonction est supprimée.
[delete] QDesignerContainerExtension::QDesignerContainerExtension(QDesignerContainerExtension &&)
Crée par « move » une instance de ` QDesignerContainerExtension`. Cette fonction est supprimée.
[virtual constexpr noexcept default] QDesignerContainerExtension::~QDesignerContainerExtension()
Supprime l'extension.
[pure virtual] void QDesignerContainerExtension::addWidget(QWidget *page)
Ajoute l'page spécifiée au conteneur en l'ajoutant à la liste des pages de l'extension.
Voir également 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.
Cette fonction devrait renvoyer « false » pour les conteneurs comportant 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'index indiquée peut être supprimé. Cela détermine si l'option du menu contextuel permettant de supprimer la page actuelle est activée.
Cette fonction devrait renvoyer « false » pour les conteneurs comportant 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 contenues dans le conteneur.
[pure virtual] int QDesignerContainerExtension::currentIndex() const
Renvoie l'index de la page actuellement sélectionnée dans le conteneur.
Voir aussi setCurrentIndex().
[pure virtual] void QDesignerContainerExtension::insertWidget(int index, QWidget *page)
Ajoute l'page indiquée au conteneur en l'insérant à l'index spécifiée dans la liste des pages de l'extension.
Voir également addWidget(), remove() et widget().
[pure virtual] void QDesignerContainerExtension::remove(int index)
Supprime la page dont l'index est indiquée de la liste des pages de l'extension.
Voir également 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 correspondant à l'index indiquée dans la liste des pages de l'extension.
Voir également currentIndex().
[pure virtual] QWidget *QDesignerContainerExtension::widget(int index) const
Renvoie la page dont l'adresse est index dans la liste des pages de l'extension.
Voir également addWidget() et insertWidget().
[delete] QDesignerContainerExtension &QDesignerContainerExtension::operator=(QDesignerContainerExtension &&)
La fonction « Move-assigns » attribue « other » à cette instance « QDesignerContainerExtension ». Cette fonction est supprimée.
[delete] QDesignerContainerExtension &QDesignerContainerExtension::operator=(const QDesignerContainerExtension &)
Copie et attribue « other » à cette instance « QDesignerContainerExtension ». Cette fonction est supprimée.
© 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.