Sur cette page

QGraphicsAnchorLayout Class

La classe `QGraphicsAnchorLayout` propose une mise en page permettant d'ancrer des widgets les uns aux autres dans la vue graphique. En savoir plus...

En-tête : #include <QGraphicsAnchorLayout>
CMake : find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake : QT += widgets
Hérite de : QGraphicsLayout

Fonctions publiques

QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr)
virtual ~QGraphicsAnchorLayout()
QGraphicsAnchor *addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
void addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)
void addCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner)
QGraphicsAnchor *anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
qreal horizontalSpacing() const
void setHorizontalSpacing(qreal spacing)
void setSpacing(qreal spacing)
void setVerticalSpacing(qreal spacing)
qreal verticalSpacing() const

Fonctions publiques réimplémentées

virtual int count() const override
virtual void invalidate() override
virtual QGraphicsLayoutItem *itemAt(int index) const override
virtual void removeAt(int index) override
virtual void setGeometry(const QRectF &geom) override

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

virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override

Description détaillée

La mise en page par ancrage permet aux développeurs de spécifier comment les widgets doivent être placés les uns par rapport aux autres, et par rapport à la mise en page elle-même. La spécification s'effectue en ajoutant des ancrages à la mise en page à l'aide des fonctions addAnchor(), addAnchors() ou addCornerAnchors().

Les ancrages existants dans la mise en page sont accessibles via la fonction anchor(). Les éléments ancrés sont automatiquement ajoutés à la mise en page, et si des éléments sont supprimés, tous leurs ancrages sont automatiquement supprimés.

Trois widgets utilisant la disposition « anchor » pour s'aligner sur les bords du widget

Utilisation d’une mise en page par ancrage pour aligner des widgets colorés simples.

Les ancrages sont toujours définis entre les bords d’un élément, le « centre » étant également considéré comme un bord. Prenons l’exemple suivant :

layout->addAnchor(b, Qt::AnchorLeft, a, Qt::AnchorRight);
layout->addAnchor(b, Qt::AnchorTop, a, Qt::AnchorBottom);

Ici, le bord droit de l’élément a est ancré au bord gauche de l’élément b et le bord inférieur de l’élément a est ancré au bord supérieur de l’élément b, ce qui a pour conséquence que l’élément b sera placé en diagonale à droite et en dessous de l’élément b.

La fonction ` addCornerAnchors()` offre un moyen plus simple d’ancrer les coins de deux widgets que les deux appels individuels à ` addAnchor()` illustrés dans le code ci-dessus. Nous voyons ici comment un widget peut être ancré au coin supérieur gauche de la mise en page qui l’entoure :

layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);

Lorsque des ancrages sont utilisés pour faire correspondre la largeur ou la hauteur des widgets, il est pratique d’utiliser la fonction ` addAnchors()`. Comme les autres fonctions permettant de spécifier des ancrages, elle peut également être utilisée pour ancrer un widget à une mise en page.

Indications de taille et politiques de taille dans une disposition d'ancrage

QGraphicsAnchorLayout respecte les indications de taille et les politiques de taille de chaque élément. Notez que certaines propriétés de QSizePolicy sont not respected.

Espacement au sein d’une mise en page par ancrage

La disposition peut répartir un peu d’espace entre les éléments. Si l’espacement n’a pas été explicitement spécifié, la quantité réelle d’espace sera généralement de 0.

Toutefois, si le premier bord est opposé au second (par exemple, si le bord droit du premier widget est ancré au bord gauche du second widget), la taille de l’ancrage sera interrogée à partir du style via une mesure en pixels : ` PM_LayoutHorizontalSpacing ` pour les ancrages horizontaux et ` PM_LayoutVerticalSpacing ` pour les ancrages verticaux.

Si l'espacement est négatif, les éléments se chevaucheront dans une certaine mesure.

Problèmes connus

Certaines fonctionnalités ne sont actuellement pas prises en charge par QGraphicsAnchorLayout. Cela pourrait changer à l’avenir ; évitez donc d’utiliser ces fonctionnalités si vous souhaitez éviter toute régression future du comportement :

  • Les facteurs d’étirement ne sont pas pris en compte.
  • QSizePolicy::ExpandFlag n'est pas respecté.
  • La hauteur par rapport à la largeur n'est pas respectée.

Voir également QGraphicsLinearLayout, QGraphicsGridLayout et QGraphicsLayout.

Documentation des fonctions membres

QGraphicsAnchorLayout::QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr)

Crée une instance de `QGraphicsAnchorLayout`. ` parent ` est transmis au constructeur de ` QGraphicsLayout`.

[virtual noexcept] QGraphicsAnchorLayout::~QGraphicsAnchorLayout()

Supprime l'objet « QGraphicsAnchorLayout ».

QGraphicsAnchor *QGraphicsAnchorLayout::addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)

Crée un point d'ancrage entre le bord firstEdge de l'élément firstItem et le bord secondEdge de l'élément secondItem. L'espacement du point d'ancrage est défini par le style. Les points d'ancrage situés entre un bord de mise en page et un bord d'élément auront une taille de 0. S'il existe déjà un point d'ancrage entre ces bords, le nouveau remplacera l'ancien.

firstItem et secondItem sont automatiquement ajoutés à la mise en page s’ils n’en font pas déjà partie. Cela signifie que count() peut augmenter jusqu’à 2.

L'espacement attribué à un point d'ancrage dépend de son type. Par exemple, les points d'ancrage reliant le bord droit d'un élément au bord gauche d'un autre (ou inversement) utiliseront l'espacement horizontal par défaut. Le même comportement s'applique aux points d'ancrage « Bas » vers « Haut » (mais ceux-ci utiliseront l'espacement vertical par défaut). Pour toutes les autres combinaisons d’ancrage, l’espacement sera de 0. Toutes les fonctions d’ancrage suivront cette règle.

L'espacement peut également être défini manuellement à l'aide de la méthode ` QGraphicsAnchor::setSpacing()`.

L'appel de cette fonction lorsque firstItem ou secondItem sont des ancêtres de la mise en page entraîne un comportement indéfini.

Voir également addAnchors() et addCornerAnchors().

void QGraphicsAnchorLayout::addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)

Aligne deux ou quatre bords de firstItem avec les bords correspondants de secondItem, de sorte que firstItem ait la même taille que secondItem dans les dimensions spécifiées par orientations.

Par exemple, l'exemple suivant aligne les bords gauche et droit de deux éléments pour que leurs largeurs coïncident :

layout->addAnchor(b, Qt::AnchorLeft, c, Qt::AnchorLeft);
layout->addAnchor(b, Qt::AnchorRight, c, Qt::AnchorRight);

Ceci peut également être réalisé à l’aide de la ligne de code suivante :

layout->addAnchors(b, c, Qt::Horizontal);

Voir également addAnchor() et addCornerAnchors().

void QGraphicsAnchorLayout::addCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner)

Crée deux ancrages entre firstItem et secondItem, spécifiés par les coins firstCorner et secondCorner, l’un correspondant au bord horizontal et l’autre au bord vertical.

Il s'agit d'une fonction pratique, car l'ancrage des coins peut s'exprimer comme l'ancrage de deux bords. Par exemple :

layout->addAnchor(a, Qt::AnchorTop, layout, Qt::AnchorTop);
layout->addAnchor(a, Qt::AnchorLeft, layout, Qt::AnchorLeft);

On peut également obtenir ce résultat avec la ligne de code suivante :

layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);

S’il existe déjà un ancrage entre les paires de bords, il sera remplacé par les ancrages spécifiés par cette fonction.

firstItem et secondItem sont automatiquement ajoutés à la mise en page s’ils n’en font pas déjà partie. Cela signifie que count() peut augmenter jusqu’à 2.

Voir également addAnchor() et addAnchors().

QGraphicsAnchor *QGraphicsAnchorLayout::anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)

Renvoie l'ancrage situé entre les points d'ancrage définis par firstItem, firstEdge, secondItem et secondEdge. Si cet ancrage n'existe pas, la fonction renvoie 0.

[override virtual] int QGraphicsAnchorLayout::count() const

Réimplémente : QGraphicsLayout::count() const.

qreal QGraphicsAnchorLayout::horizontalSpacing() const

Renvoie l'espacement horizontal par défaut pour la disposition des ancres.

Voir également verticalSpacing() et setHorizontalSpacing().

[override virtual] void QGraphicsAnchorLayout::invalidate()

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

[override virtual] QGraphicsLayoutItem *QGraphicsAnchorLayout::itemAt(int index) const

Réimplémente : QGraphicsLayout::itemAt(int i) const.

[override virtual] void QGraphicsAnchorLayout::removeAt(int index)

Réimplémente : QGraphicsLayout::removeAt(int index).

Supprime l'élément de mise en page situé à l'adresse index sans le détruire. La propriété de l'élément est transférée à l'appelant.

La suppression d’un élément entraîne également la suppression de toutes les ancres qui lui sont associées.

Voir également itemAt() et count().

[override virtual] void QGraphicsAnchorLayout::setGeometry(const QRectF &geom)

Réimplémente : QGraphicsLayoutItem::setGeometry(const QRectF &rect).

void QGraphicsAnchorLayout::setHorizontalSpacing(qreal spacing)

Définit l'espacement horizontal par défaut de la disposition des ancres sur spacing.

Voir également horizontalSpacing(), setVerticalSpacing() et setSpacing().

void QGraphicsAnchorLayout::setSpacing(qreal spacing)

Définit l'espacement horizontal et vertical par défaut de la disposition des ancres sur « spacing ».

Si un élément est ancré sans qu'aucun espacement ne soit associé à l'ancrage, il utilisera l'espacement par défaut.

QGraphicsAnchorLayout Ne prend pas en charge les espacements négatifs. La définition d’une valeur négative annulera l’espacement précédent et fera en sorte que la mise en page utilise l’espacement fourni par le style actuel du widget.

Voir également setHorizontalSpacing() et setVerticalSpacing().

void QGraphicsAnchorLayout::setVerticalSpacing(qreal spacing)

Définit l'espacement vertical par défaut de la disposition des ancres sur spacing.

Voir également verticalSpacing(), setHorizontalSpacing() et setSpacing().

[override virtual protected] QSizeF QGraphicsAnchorLayout::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const

Réimplémente : QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const.

qreal QGraphicsAnchorLayout::verticalSpacing() const

Renvoie l'espacement vertical par défaut pour la disposition des ancres.

Voir également horizontalSpacing() et setVerticalSpacing().

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