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 : |
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 :
| Constante | Valeur | Description |
|---|---|---|
QLayout::SetDefaultConstraint | 0 | Dans 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::SetFixedSize | 3 | Dans 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::SetMinimumSize | 2 | Dans les orientations contraintes, l’étendue minimale du widget est définie sur minimumSize(). |
QLayout::SetMaximumSize | 4 | Dans la ou les orientations contraintes, l’étendue maximale du widget est définie sur maximumSize(). |
QLayout::SetMinAndMaxSize | 5 | Dans les orientations contraintes, l’étendue minimale du widget est définie sur minimumSize(), et l’étendue maximale est définie sur maximumSize(). |
QLayout::SetNoConstraint | 1 | Aucune 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é.
QWidget *QLayout::menuBar() const
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.