Sur cette page

QLayout Class

La classe QLayout est la classe de base des gestionnaires de géométrie. En savoir plus...

En-tête : #include <QLayout>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Hérite de :QObject et QLayoutItem
Hérité 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.

Pour les utilisateurs des sous-classes de QLayout ou de QMainWindow, il est rarement nécessaire 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 devriez également implémenter minimumSize() pour vous assurer que votre mise en page ne soit pas redimensionnée à une taille nulle s’il y a trop peu d’espace. Pour prendre en charge les éléments enfants dont la hauteur dépend de leur largeur, implémentez hasHeightForWidth() et heightForWidth(). Consultez l’exemple Flow Layout pour plus d’informations sur l’implémentation de gestionnaires de mise en page personnalisés.

La gestion de la géométrie s’arrête lorsque le gestionnaire de mise en page est supprimé.

Voir également « QLayoutItem» , « Gestion de la mise en page », « Exemple de mises en page de base » et « Exemple de mise en page en flux ».

Documentation sur les types de membres

enum QLayout::SizeConstraint

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

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

Les valeurs possibles sont :

ConstanteValeurDescription
QLayout::SetDefaultConstraint0Dans la ou les orientations contraintes, l’étendue minimale du widget est définie sur minimumSize(), à moins qu’une taille minimale n’ait déjà été définie.
QLayout::SetFixedSize3Dans la ou les orientations contraintes, l'étendue du widget est définie sur sizeHint(), et il ne peut pas être redimensionné dans cette direction.
QLayout::SetMinimumSize2Dans les orientations contraintes, l’étendue minimale du widget est définie sur minimumSize().
QLayout::SetMaximumSize4Dans la ou les orientations contraintes, l’étendue maximale du widget est définie sur maximumSize().
QLayout::SetMinAndMaxSize5Dans les orientations contraintes, l’étendue minimale du widget est définie sur minimumSize(), et l’étendue maximale est définie sur 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é définit les marges appliqué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 également setContentsMargins() et getContentsMargins().

[since 6.10] horizontalSizeConstraint : SizeConstraint

Cette propriété définit la contrainte de taille horizontale.

Le mode par défaut est QLayout::SetDefaultConstraint

Cette énumération 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. Elle permet de définir une contrainte de taille pour la boîte de dialogue. La définition d'une contrainte de taille verticale ou horizontale prendra le pas 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 au sein de la mise en page

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

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

Fonctions d’accès :

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

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

[since 6.10] verticalSizeConstraint : SizeConstraint

Cette propriété définit la contrainte de taille verticale.

Le mode par défaut est QLayout::SetDefaultConstraint

Cette énumération a été introduite dans Qt 6.10.

Fonctions d'accès :

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

Voir également horizontalSizeConstraint() et sizeConstraint().

Documentation des fonctions membres

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

Crée un nouveau QLayout de niveau supérieur, dont le parent est parent.

La mise en page est directement définie comme mise en page de niveau supérieur pour parent. Il ne peut y avoir qu'une seule mise en page de niveau supérieur pour un widget. Elle est renvoyée par la fonction QWidget::layout().

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

Voir également QWidget::setLayout().

bool QLayout::activate()

Réactualise la mise en page de parentWidget() si nécessaire.

En règle générale, vous ne devriez pas avoir besoin d'appeler cette méthode, car elle est automatiquement appelée au moment le plus approprié. Elle renvoie « true » si la mise en page a été refaite.

Voir également update() et QWidget::updateGeometry().

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

Cette fonction est appelée depuis les fonctions ` addLayout() ` ou ` insertLayout() ` dans les sous-classes afin d'ajouter l'childLayout de mise en page en tant que sous-mise en page.

Le seul cas où vous devez l'appeler directement est lorsque vous implémentez une mise en page personnalisée prenant en charge les mises en page imbriquées.

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

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

Cette fonction est appelée depuis les fonctions ` addWidget() ` des sous-classes afin d'ajouter ` w ` en tant que widget géré d'une mise en page.

Si w est déjà géré par une mise en page, cette fonction génère un avertissement et supprime w de cette mise en page. Cette fonction doit donc être appelée avant d’ajouter w à la structure de données de la mise en page.

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

Implémentée dans les sous-classes pour ajouter une disposition « item ». La manière dont elle est ajoutée dépend de chaque sous-classe.

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

Remarque : la propriété de item est transférée à la mise en page, et c’est à cette dernière qu’il incombe de le supprimer.

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

void QLayout::addWidget(QWidget *w)

Ajoute le widget w à cette mise en page selon les règles propres à celle-ci. Cette fonction utilise la méthode addItem().

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

Renvoie le rectangle qui doit être masqué lorsque la géométrie de cette mise en page est définie sur « r », à condition que cette mise en page prenne en charge la fonction « setAlignment() ».

Le résultat est calculé à partir 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 respecte toutes les contraintes de taille définies sur widget, y compris celles de la fonction 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 : fonctiongetter pour la propriété contentsMargins.

Voir aussi setContentsMargins().

QRect QLayout::contentsRect() const

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

Voir également ` 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ée dans les sous-classes pour renvoyer le nombre d'éléments de la mise en page.

Voir également itemAt().

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

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

Indique si cette disposition peut utiliser plus d’espace que sizeHint(). Une valeur de Qt::Vertical ou Qt::Horizontal signifie qu’elle souhaite s’étendre dans une seule dimension, tandis que Qt::Vertical | Qt::Horizontal signifie qu’elle souhaite s’étendre 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 en fonction de la valeur de size policies de leurs widgets enfants.

Voir également 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 chacune des adresses left, top, right et bottom (à l'exception de nullptr), stocke la taille de la marge indiquée à l'emplacement auquel le pointeur fait référence.

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 également 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 (sans compter les mises en page enfants).

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 mise en page (à l'exclusion des mises en page enfants).

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

L'implémentation par défaut parcourt tous les éléments à l'aide de la fonction 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 également 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 à l'adresse index. Si aucun élément de ce type n'existe, 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 permet de parcourir une disposition. Le code suivant dessinera un rectangle pour chaque élément de disposition présent dans la structure de disposition 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 disposition. 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 autorise 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 disposition. 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 autorise un redimensionnement illimité.

QWidget *QLayout::parentWidget() const

Renvoie le widget parent de cette mise en page, ou ` nullptr ` si cette mise en page n'est installée sur aucun widget.

Si la mise en page est une sous-mise en page, cette fonction renvoie le widget parent de la mise en page parente.

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 cet élément.

Notez que ` item ` peut être une mise en page (puisque ` QLayout ` hérite de ` QLayoutItem`).

Voir également removeWidget() et addItem().

void QLayout::removeWidget(QWidget *widget)

Supprime le widget widget de la mise en page. Après cet appel, il incombe à l'appelant de définir une géométrie appropriée pour le widget, de le replacer dans une mise en page ou de le masquer explicitement si nécessaire.

Remarque : la propriété de ` widget ` reste la même que lors de son 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é. Renvoie l'élément de mise en page contenant le widget from en cas de succès. Sinon, nullptr est renvoyé. Si options contient Qt::FindChildrenRecursively (valeur par défaut), les sous-mises en page sont parcourues pour effectuer le remplacement. Tout autre indicateur présent dans options est ignoré.

Notez que l’élément renvoyé peut donc ne pas appartenir à cette mise en page, mais à une sous-mise en page.

L’élément de mise en page renvoyé n’appartient plus à la mise en page et doit être soit supprimé, soit inséré dans une autre mise en page. Le widget from n’est plus géré par la mise en page et devra peut-être être supprimé ou masqué. Le parent du widget from reste inchangé.

Cette fonction fonctionne pour les mises en page intégrées de Qt, mais peut ne pas fonctionner pour les mises en page personnalisées.

Voir également ` indexOf()`.

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

Définit l'alignement du widget w sur alignment et renvoie « true » si w est présent dans cette mise en page (à l'exclusion des mises en page enfants) ; sinon, renvoie « false ».

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

Définit l'alignement de la mise en page l sur alignment et renvoie true si l est détecté dans cette mise en page (à l'exclusion des mises en page enfants) ; sinon, renvoie false.

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

void QLayout::setContentsMargins(const QMargins &margins)

Définit les margins s à appliquer à la mise en page.

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

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

Voir aussi contentsMargins().

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

Définit les marges left, top, right et bottom à appliquer 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 : fonctionde définition pour la propriété contentsMargins.

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

void QLayout::setEnabled(bool enable)

Active cette mise en page si la valeur « enable » est « true » ; dans le cas contraire, elle la désactive.

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

Par défaut, toutes les mises en page sont activées.

Voir aussi 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 à la fois les contraintes de taille « horizontal » et « vertical ».

Cette fonction a été introduite dans Qt 6.10.

Voir également sizeConstraint(), horizontalSizeConstraint() et verticalSizeConstraint().

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

Doit être implémentée dans les sous-classes pour supprimer de la mise en page l'élément situé à l'adresse index, et renvoyer cet élément. Si aucun élément ne correspond à cette adresse, 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.

L'extrait de code suivant illustre une méthode sûre pour supprimer tous les éléments d'une mise en page :

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()

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

Remarque : fonctionde réinitialisation de la propriété contentsMargins.

Cette fonction a été introduite dans Qt 6.1.

Voir également setContentsMargins().

void QLayout::update()

Met à jour la mise en page de parentWidget().

En règle générale, vous ne devriez pas avoir besoin d'appeler cette fonction, car elle est automatiquement appelée au moment le plus opportun.

Voir également 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.