Sur cette page

QLayout Class

La classe QLayout est la classe de base des gestionnaires de géométrie. Plus d'informations...

En-tête : #include <QLayout>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Hérite : QObject et QLayoutItem
Héritée par :

QBoxLayout, QFormLayout, QGridLayout, et QStackedLayout

Types publics

enum SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint }

Propriétés

Fonctions publiques

QLayout(QWidget *parent = nullptr)
bool activate()
virtual void addItem(QLayoutItem *item) = 0
void addWidget(QWidget *w)
QMargins contentsMargins() const
QRect contentsRect() const
virtual int count() const = 0
void getContentsMargins(int *left, int *top, int *right, int *bottom) const
QLayout::SizeConstraint horizontalSizeConstraint() const
virtual int indexOf(const QLayoutItem *layoutItem) const
virtual int indexOf(const QWidget *widget) const
bool isEnabled() const
virtual QLayoutItem *itemAt(int index) const = 0
QWidget *menuBar() const
QWidget *parentWidget() const
void removeItem(QLayoutItem *item)
void removeWidget(QWidget *widget)
virtual QLayoutItem *replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)
bool setAlignment(QWidget *w, Qt::Alignment alignment)
bool setAlignment(QLayout *l, Qt::Alignment alignment)
void setContentsMargins(const QMargins &margins)
void setContentsMargins(int left, int top, int right, int bottom)
void setEnabled(bool enable)
void setHorizontalSizeConstraint(QLayout::SizeConstraint constraint)
void setMenuBar(QWidget *widget)
void setSizeConstraint(QLayout::SizeConstraint constraint)
(since 6.10) void setSizeConstraints(QLayout::SizeConstraint horizontal, QLayout::SizeConstraint vertical)
virtual void setSpacing(int)
void setVerticalSizeConstraint(QLayout::SizeConstraint constraint)
QLayout::SizeConstraint sizeConstraint() const
virtual int spacing() const
virtual QLayoutItem *takeAt(int index) = 0
(since 6.1) void unsetContentsMargins()
void update()
QLayout::SizeConstraint verticalSizeConstraint() const

Fonctions publiques réimplémentées

virtual QSizePolicy::ControlTypes controlTypes() const override
virtual Qt::Orientations expandingDirections() const override
virtual QRect geometry() const override
virtual void invalidate() override
virtual bool isEmpty() const override
virtual QLayout *layout() override
virtual QSize maximumSize() const override
virtual QSize minimumSize() const override
virtual void setGeometry(const QRect &r) override

Membres publics statiques

QSize closestAcceptableSize(const QWidget *widget, const QSize &size)

Fonctions protégées

void addChildLayout(QLayout *childLayout)
void addChildWidget(QWidget *w)
QRect alignmentRect(const QRect &r) const

Fonctions protégées réimplémentées

virtual void childEvent(QChildEvent *e) override

Description détaillée

Il s'agit d'une classe de base abstraite dont héritent les classes concrètes QBoxLayout, QGridLayout, QFormLayout et QStackedLayout.

Les utilisateurs des sous-classes de QLayout ou de QMainWindow ont rarement besoin d'utiliser les fonctions de base fournies par QLayout, telles que setSizeConstraint() ou setMenuBar(). Voir Gestion de la mise en page pour plus d'informations.

Pour créer votre propre gestionnaire de mise en page, implémentez les fonctions addItem(), sizeHint(), setGeometry(), itemAt() et takeAt(). Vous devez également implémenter la fonction minimumSize() pour vous assurer que votre présentation n'est pas redimensionnée à zéro si l'espace est insuffisant. Pour prendre en charge les enfants dont la hauteur dépend de la largeur, implémentez hasHeightForWidth() et heightForWidth(). Voir l'exemple Flow Layout pour plus d'informations sur la mise en œuvre de gestionnaires de mise en page personnalisés.

La gestion de la géométrie s'arrête lorsque le gestionnaire de disposition est supprimé.

Voir également QLayoutItem, Gestion des dispositions, Exemple de dispositions de base et Exemple de disposition en flux.

Documentation sur les types de membres

enum QLayout::SizeConstraint

Décrit comment la mise en page contraint la taille du widget.

Une contrainte verticale affecte la hauteur du widget, tandis qu'une contrainte horizontale affecte sa largeur.

Les valeurs possibles sont les suivantes

ConstanteValeurDescription
QLayout::SetDefaultConstraint0Dans la ou les orientation(s) contrainte(s), l'étendue minimale du widget est fixée à minimumSize(), à moins qu'une taille minimale n'ait déjà été définie.
QLayout::SetFixedSize3Dans la ou les orientation(s) contrainte(s), l'étendue du widget est fixée à sizeHint(), et il ne peut pas être redimensionné dans cette direction.
QLayout::SetMinimumSize2Dans la ou les orientation(s) contrainte(s), l'étendue minimale du widget est fixée à minimumSize().
QLayout::SetMaximumSize4Dans l'(les) orientation(s) contrainte(s), l'étendue maximale du widget est fixée à maximumSize().
QLayout::SetMinAndMaxSize5Dans l'(les) orientation(s) contrainte(s), l'étendue minimale du widget est fixée à minimumSize(), et l'étendue maximale est fixée à maximumSize().
QLayout::SetNoConstraint1Aucune contrainte de taille n'est appliquée au widget.

Voir également setSizeConstraint(), setSizeConstraints(), horizontalSizeConstraint(), setHorizontalSizeConstraint() et setVerticalSizeConstraint().

Documentation sur les propriétés

contentsMargins : QMargins

Cette propriété contient les marges utilisées autour de la mise en page

Par défaut, QLayout utilise les valeurs fournies par le style. Sur la plupart des plateformes, la marge est de 11 pixels dans toutes les directions.

Fonctions d'accès :

QMargins contentsMargins() const
void setContentsMargins(int left, int top, int right, int bottom)
void setContentsMargins(const QMargins &margins)
void unsetContentsMargins()

Voir aussi setContentsMargins() et getContentsMargins().

[since 6.10] horizontalSizeConstraint : SizeConstraint

Cette propriété contient la contrainte de taille horizontale.

Le mode par défaut est QLayout::SetDefaultConstraint

Cette propriété a été introduite dans Qt 6.10.

Fonctions d'accès :

QLayout::SizeConstraint horizontalSizeConstraint() const
void setHorizontalSizeConstraint(QLayout::SizeConstraint constraint)

Voir aussi verticalSizeConstraint() et sizeConstraint().

sizeConstraint : SizeConstraint

Cette propriété définit le mode de redimensionnement de la mise en page. Cette propriété définit la contrainte de taille pour la boîte de dialogue. La définition d'une contrainte de taille verticale ou horizontale l'emporte sur cette propriété.

Le mode par défaut est SetDefaultConstraint.

Fonctions d'accès :

QLayout::SizeConstraint sizeConstraint() const
void setSizeConstraint(QLayout::SizeConstraint constraint)

Voir également horizontalSizeConstraint() et verticalSizeConstraint().

spacing : int

Cette propriété définit l'espacement entre les widgets à l'intérieur de la disposition

Si aucune valeur n'est explicitement définie, l'espacement de la disposition est hérité de la disposition parente ou des paramètres de style du widget parent.

Pour QGridLayout et QFormLayout, il est possible de définir des espacements horizontaux et verticaux différents en utilisant setHorizontalSpacing() et setVerticalSpacing(). Dans ce cas, spacing() renvoie -1.

Fonctions d'accès :

virtual int spacing() const
virtual void setSpacing(int)

Voir aussi contentsRect(), getContentsMargins(), QStyle::layoutSpacing() et QStyle::pixelMetric().

[since 6.10] verticalSizeConstraint : SizeConstraint

Cette propriété contient la contrainte de taille verticale.

Le mode par défaut est QLayout::SetDefaultConstraint

Cette propriété a été introduite dans Qt 6.10.

Fonctions d'accès :

QLayout::SizeConstraint verticalSizeConstraint() const
void setVerticalSizeConstraint(QLayout::SizeConstraint constraint)

Voir aussi horizontalSizeConstraint() et sizeConstraint().

Documentation des fonctions membres

[explicit] QLayout::QLayout(QWidget *parent = nullptr)

Construit un nouveau QLayout de premier niveau, avec pour parent parent.

La présentation est directement définie comme la présentation de premier niveau pour parent. Il ne peut y avoir qu'une seule présentation de premier niveau pour un widget. Elle est renvoyée par QWidget::layout().

Si parent est nullptr, vous devez insérer cette disposition dans une autre disposition ou la définir comme disposition d'un widget à l'aide de QWidget::setLayout().

Voir aussi QWidget::setLayout().

bool QLayout::activate()

Refait la mise en page pour parentWidget() si nécessaire.

Vous ne devriez généralement pas avoir besoin d'appeler cette fonction, car elle est automatiquement appelée au moment le plus opportun. Elle renvoie true si la mise en page a été refaite.

Voir aussi update() et QWidget::updateGeometry().

[protected] void QLayout::addChildLayout(QLayout *childLayout)

Cette fonction est appelée à partir des fonctions addLayout() ou insertLayout() dans les sous-classes pour ajouter la mise en page childLayout en tant que mise en page secondaire.

Le seul scénario dans lequel vous devez l'appeler directement est celui où vous mettez en œuvre une disposition personnalisée qui prend en charge les dispositions imbriquées.

Voir aussi QBoxLayout::addLayout(), QBoxLayout::insertLayout() et QGridLayout::addLayout().

[protected] void QLayout::addChildWidget(QWidget *w)

Cette fonction est appelée par les fonctions addWidget() des sous-classes pour ajouter w en tant que widget géré par une disposition.

Si w est déjà géré par une disposition, cette fonction produira un avertissement et supprimera w de cette disposition. Cette fonction doit donc être appelée avant d'ajouter w à la structure de données de la disposition.

[pure virtual] void QLayout::addItem(QLayoutItem *item)

Implémentée dans les sous-classes pour ajouter une item. La manière dont elle est ajoutée est spécifique à chaque sous-classe.

Cette fonction n'est généralement pas appelée dans le code de l'application. Pour ajouter un widget à une disposition, utilisez la fonction addWidget() ; pour ajouter une disposition enfant, utilisez la fonction addLayout() fournie par la sous-classe QLayout concernée.

Remarque : la propriété de item est transférée à la disposition, et c'est à cette dernière qu'il incombe de la supprimer.

Voir également addWidget(), QBoxLayout::addLayout() et QGridLayout::addLayout().

void QLayout::addWidget(QWidget *w)

Ajoute le widget w à cette mise en page d'une manière spécifique à la mise en page. Cette fonction utilise addItem().

[protected] QRect QLayout::alignmentRect(const QRect &r) const

Renvoie le rectangle qui devrait être couvert lorsque la géométrie de cette disposition est définie sur r, à condition que cette disposition prenne en charge setAlignment().

Le résultat est dérivé de sizeHint() et expandingDirections(). Il n'est jamais plus grand que r.

[override virtual protected] void QLayout::childEvent(QChildEvent *e)

Réimplémente : QObject::childEvent(QChildEvent *event).

[static] QSize QLayout::closestAcceptableSize(const QWidget *widget, const QSize &size)

Renvoie une taille qui satisfait toutes les contraintes de taille sur widget, y compris heightForWidth() et qui est aussi proche que possible de size.

QMargins QLayout::contentsMargins() const

Renvoie les marges utilisées autour de la mise en page.

Par défaut, QLayout utilise les valeurs fournies par le style. Sur la plupart des plateformes, la marge est de 11 pixels dans toutes les directions.

Remarque : fonction d'obtention pour la propriété contentsMargins.

Voir également setContentsMargins().

QRect QLayout::contentsRect() const

Renvoie le rectangle geometry() de la mise en page, mais en tenant compte des marges du contenu.

Voir aussi setContentsMargins() et getContentsMargins().

[override virtual] QSizePolicy::ControlTypes QLayout::controlTypes() const

Réimplémente : QLayoutItem::controlTypes() const.

[pure virtual] int QLayout::count() const

Doit être implémenté dans les sous-classes pour renvoyer le nombre d'éléments dans la disposition.

Voir également itemAt().

[override virtual] Qt::Orientations QLayout::expandingDirections() const

Réimplémente : QLayoutItem::expandingDirections() const.

Renvoie si cette disposition peut utiliser plus d'espace que sizeHint(). Une valeur de Qt::Vertical ou Qt::Horizontal signifie qu'elle ne veut croître que dans une seule dimension, tandis que Qt::Vertical | Qt::Horizontal signifie qu'elle veut croître dans les deux dimensions.

L'implémentation par défaut renvoie Qt::Horizontal | Qt::Vertical. Les sous-classes la réimplémentent pour renvoyer une valeur significative basée sur les widgets enfants size policies.

Voir aussi sizeHint().

[override virtual] QRect QLayout::geometry() const

Réimplémente : QLayoutItem::geometry() const.

Voir également setGeometry().

void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) const

Pour chacun des left, top, right et bottom qui n'est pas nullptr, enregistre la taille de la marge nommée dans l'emplacement auquel le pointeur se réfère.

Par défaut, QLayout utilise les valeurs fournies par le style. Sur la plupart des plateformes, la marge est de 11 pixels dans toutes les directions.

Voir aussi setContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin, et PM_LayoutBottomMargin.

[virtual] int QLayout::indexOf(const QLayoutItem *layoutItem) const

Recherche l'élément de mise en page layoutItem dans cette mise en page (à l'exclusion des mises en page enfant).

Renvoie l'index de layoutItem, ou -1 si layoutItem n'est pas trouvé.

[virtual] int QLayout::indexOf(const QWidget *widget) const

Recherche le widget widget dans cette présentation (à l'exclusion des présentations enfant).

Renvoie l'index de widget, ou -1 si widget n'est pas trouvé.

L'implémentation par défaut itère sur tous les éléments en utilisant itemAt().

[override virtual] void QLayout::invalidate()

Réimplémente : QLayoutItem::invalidate().

[override virtual] bool QLayout::isEmpty() const

Réimplémente : QLayoutItem::isEmpty() const.

bool QLayout::isEnabled() const

Renvoie true si la mise en page est activée ; sinon, renvoie false.

Voir aussi setEnabled().

[pure virtual] QLayoutItem *QLayout::itemAt(int index) const

Doit être implémentée dans les sous-classes pour renvoyer l'élément de mise en page à index. S'il n'existe pas d'élément de ce type, la fonction doit renvoyer nullptr. Les éléments sont numérotés consécutivement à partir de 0. Si un élément est supprimé, les autres éléments seront renumérotés.

Cette fonction peut être utilisée pour itérer sur une disposition. Le code suivant dessine un rectangle pour chaque élément de la structure du widget.

static void paintLayout(QPainter *painter, QLayoutItem *item)
{
    QLayout *layout = item->layout();
    if (layout) {
        for (int i = 0; i < layout->count(); ++i)
            paintLayout(painter, layout->itemAt(i));
    }
    painter->drawRect(item->geometry());
}

void MyWidget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    if (layout())
        paintLayout(&painter, layout());
}

Voir également count() et takeAt().

[override virtual] QLayout *QLayout::layout()

Réimplémente : QLayoutItem::layout().

[override virtual] QSize QLayout::maximumSize() const

Réimplémente : QLayoutItem::maximumSize() const.

Renvoie la taille maximale de cette mise en page. Il s'agit de la plus grande taille que la disposition peut avoir tout en respectant les spécifications.

La valeur renvoyée n'inclut pas l'espace requis par QWidget::setContentsMargins() ou menuBar().

L'implémentation par défaut permet un redimensionnement illimité.

Renvoie la barre de menu définie pour cette mise en page, ou nullptr si aucune barre de menu n'est définie.

Voir également setMenuBar().

[override virtual] QSize QLayout::minimumSize() const

Réimplémente : QLayoutItem::minimumSize() const.

Renvoie la taille minimale de cette présentation. Il s'agit de la plus petite taille que la disposition peut avoir tout en respectant les spécifications.

La valeur renvoyée n'inclut pas l'espace requis par QWidget::setContentsMargins() ou menuBar().

L'implémentation par défaut permet un redimensionnement illimité.

QWidget *QLayout::parentWidget() const

Renvoie le widget parent de cette disposition, ou nullptr si cette disposition n'est installée sur aucun widget.

Si la disposition est une sous-disposition, cette fonction renvoie le widget parent de la disposition parentale.

Voir également parent().

void QLayout::removeItem(QLayoutItem *item)

Supprime l'élément de mise en page item de la mise en page. Il incombe à l'appelant de supprimer l'élément.

Notez que item peut être une disposition (puisque QLayout hérite de QLayoutItem).

Voir également removeWidget() et addItem().

void QLayout::removeWidget(QWidget *widget)

Supprime le widget widget de la disposition. Après cet appel, il incombe à l'appelant de donner au widget une géométrie raisonnable, de le replacer dans une disposition ou de le cacher explicitement si nécessaire.

Remarque : la propriété de widget reste la même que lorsqu'il a été ajouté.

Voir également removeItem(), QWidget::setGeometry() et addWidget().

[virtual] QLayoutItem *QLayout::replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)

Recherche le widget from et le remplace par le widget to s'il est trouvé. En cas de succès, l'élément de mise en page qui contient le widget from est renvoyé. Sinon, nullptr est renvoyé. Si options contient Qt::FindChildrenRecursively (par défaut), les sous-modèles sont recherchés pour effectuer le remplacement. Tout autre drapeau dans options est ignoré.

Notez que l'élément renvoyé peut donc ne pas appartenir à cette disposition, mais à une sous-disposition.

L'élément de disposition retourné n'appartient plus à la disposition et doit être supprimé ou inséré dans une autre disposition. Le widget from n'est plus géré par la disposition et peut devoir être supprimé ou caché. Le parent du widget from reste inchangé.

Cette fonction fonctionne pour les dispositions Qt intégrées, mais peut ne pas fonctionner pour les dispositions personnalisées.

Voir aussi indexOf().

bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment)

Définit l'alignement du widget w sur alignment et renvoie un message vrai si w est présent dans cette mise en page (à l'exclusion des mises en page enfant) ; sinon, le message renvoie un message false.

bool QLayout::setAlignment(QLayout *l, Qt::Alignment alignment)

Définit l'alignement de la disposition l à alignment et renvoie true si l se trouve dans cette disposition (sans tenir compte des dispositions enfants) ; sinon, renvoie false.

Il s'agit d'une fonction surchargée.

void QLayout::setContentsMargins(const QMargins &margins)

Définit le margins à utiliser autour de la mise en page.

Par défaut, QLayout utilise les valeurs fournies par le style. Sur la plupart des plateformes, la marge est de 11 pixels dans toutes les directions.

Remarque : fonction de définition de la propriété contentsMargins.

Voir également contentsMargins().

void QLayout::setContentsMargins(int left, int top, int right, int bottom)

Définit les marges left, top, right, et bottom à utiliser autour de la mise en page.

Par défaut, QLayout utilise les valeurs fournies par le style. Sur la plupart des plateformes, la marge est de 11 pixels dans toutes les directions.

Remarque : fonction de définition de la propriété contentsMargins.

Voir aussi getContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin, et PM_LayoutBottomMargin.

void QLayout::setEnabled(bool enable)

Active cette disposition si enable est vrai, sinon la désactive.

Une mise en page activée s'adapte dynamiquement aux changements ; une mise en page désactivée agit comme si elle n'existait pas.

Par défaut, toutes les dispositions sont activées.

Voir également isEnabled().

[override virtual] void QLayout::setGeometry(const QRect &r)

Réimplémente : QLayoutItem::setGeometry(const QRect &r).

Voir également geometry().

void QLayout::setMenuBar(QWidget *widget)

Indique au gestionnaire de géométrie de placer la barre de menu widget en haut de parentWidget(), à l'extérieur de QWidget::contentsMargins(). Tous les widgets enfants sont placés sous le bord inférieur de la barre de menu.

Voir également menuBar().

[since 6.10] void QLayout::setSizeConstraints(QLayout::SizeConstraint horizontal, QLayout::SizeConstraint vertical)

Définit les contraintes de taille horizontal et vertical.

Cette fonction a été introduite dans Qt 6.10.

Voir aussi sizeConstraint(), horizontalSizeConstraint(), et verticalSizeConstraint().

[pure virtual] QLayoutItem *QLayout::takeAt(int index)

Doit être implémentée dans les sous-classes pour supprimer l'élément de la mise en page à l'adresse index de la mise en page et renvoyer l'élément. Si cet élément n'existe pas, la fonction ne doit rien faire et renvoyer 0. Les éléments sont numérotés consécutivement à partir de 0. Si un élément est supprimé, les autres éléments seront renumérotés.

Le fragment de code suivant montre un moyen sûr de supprimer tous les éléments d'une disposition :

QLayoutItem *child;
while ((child = layout->takeAt(0)) != nullptr) {
    ...
    delete child->widget(); // delete the widget
    delete child;   // delete the layout item
}

Voir également itemAt() et count().

[since 6.1] void QLayout::unsetContentsMargins()

Annule les marges définies par l'utilisateur autour de la mise en page. La mise en page utilisera les valeurs par défaut fournies par le style.

Note : Fonction de réinitialisation pour la propriété contentsMargins.

Cette fonction a été introduite dans Qt 6.1.

Voir aussi setContentsMargins().

void QLayout::update()

Met à jour la présentation de parentWidget().

Vous ne devriez généralement pas avoir besoin d'appeler cette fonction, car elle est automatiquement appelée au moment le plus opportun.

Voir aussi activate() et invalidate().

© 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.