Sur cette page

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

Capture d'écran de l'éditeur d'interface utilisateur <span translate=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.