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 : |
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
| Constante | Valeur | Description |
|---|---|---|
QLayout::SetDefaultConstraint | 0 | Dans 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::SetFixedSize | 3 | Dans 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::SetMinimumSize | 2 | Dans la ou les orientation(s) contrainte(s), l'étendue minimale du widget est fixée à minimumSize(). |
QLayout::SetMaximumSize | 4 | Dans l'(les) orientation(s) contrainte(s), l'étendue maximale du widget est fixée à maximumSize(). |
QLayout::SetMinAndMaxSize | 5 | Dans l'(les) orientation(s) contrainte(s), l'étendue minimale du widget est fixée à minimumSize(), et l'étendue maximale est fixée à 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é 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é.
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 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.