QGraphicsAnchorLayout Class
La classe QGraphicsAnchorLayout fournit une disposition permettant d'ancrer les widgets ensemble dans la vue graphique. Plus d'informations...
| En-tête : | #include <QGraphicsAnchorLayout> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake : | QT += widgets |
| Héritages : | 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 disposition des ancres permet aux développeurs de spécifier comment les widgets doivent être placés les uns par rapport aux autres et par rapport à la disposition elle-même. La spécification se fait en ajoutant des ancres à la disposition en appelant addAnchor(), addAnchors() ou addCornerAnchors().
Les ancres existantes dans la mise en page sont accessibles à l'aide de la fonction anchor(). Les éléments ancrés sont automatiquement ajoutés à la mise en page, et si des éléments sont supprimés, toutes leurs ancres seront automatiquement supprimées.

Utilisation d'une disposition à ancres pour aligner des widgets colorés simples.
Les ancres sont toujours placées 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, de sorte 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. Ici, nous voyons 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);
Dans les cas où les ancres sont utilisées pour faire correspondre les largeurs ou les hauteurs des widgets, il est pratique d'utiliser la fonction addAnchors(). Comme les autres fonctions permettant de spécifier des ancres, elle peut également être utilisée pour ancrer un widget à une disposition.
Indices et politiques de taille dans une disposition d'ancrage
QGraphicsAnchorLayout respecte les indications et les règles de taille de chaque élément. Notez que certaines propriétés de QSizePolicy sont not respected.
Espacement au sein d'une disposition d'ancrage
La mise en page peut répartir un certain espace entre les éléments. Si l'espacement n'a pas été explicitement spécifié, la quantité réelle d'espace est généralement égale à 0.
Toutefois, si le premier bord est l'opposé du second bord (par exemple, le bord droit du premier widget est ancré au bord gauche du second widget), la taille de l'ancre sera demandée au style par le biais d'une métrique en pixels : PM_LayoutHorizontalSpacing pour les ancres horizontales et PM_LayoutVerticalSpacing pour les ancres verticales.
Si l'espacement est négatif, les éléments se chevaucheront dans une certaine mesure.
Problèmes connus
QGraphicsAnchorLayout ne prend actuellement pas en charge certaines fonctionnalités. Cela pourrait changer à l'avenir, donc évitez d'utiliser ces fonctionnalités si vous voulez éviter toute régression future du comportement :
- Les facteurs d'étirement ne sont pas respectés.
- QSizePolicy::ExpandFlag n'est pas respecté.
- La hauteur pour la largeur n'est pas respectée.
Voir aussi QGraphicsLinearLayout, QGraphicsGridLayout, et QGraphicsLayout.
Documentation sur les fonctions membres
QGraphicsAnchorLayout::QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr)
Construit une instance de QGraphicsAnchorLayout. parent est transmis au constructeur de QGraphicsLayout.
[virtual noexcept] QGraphicsAnchorLayout::~QGraphicsAnchorLayout()
Détruit l'objet QGraphicsAnchorLayout.
QGraphicsAnchor *QGraphicsAnchorLayout::addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
Crée une ancre entre le bord firstEdge de l'article firstItem et le bord secondEdge de l'article secondItem. L'espacement de l'ancre est repris du style. Les ancres situées entre un bord de la mise en page et un bord de l'élément auront une taille de 0. S'il existe déjà une ancre entre les bords, la nouvelle ancre remplacera l'ancienne.
firstItem et secondItem sont automatiquement ajoutés à la mise en page s'ils n'en font pas partie. Cela signifie que count() peut augmenter jusqu'à 2.
L'espacement d'une ancre dépend du type d'ancre. Par exemple, les ancres allant du bord droit d'un élément au bord gauche d'un autre (ou vice versa) utiliseront l'espacement horizontal par défaut. Le même comportement s'applique aux ancres de bas en haut (mais elles utiliseront l'espacement vertical par défaut). Pour toutes les autres combinaisons d'ancres, l'espacement sera de 0. Toutes les fonctions d'ancrage suivront cette règle.
L'espacement peut également être défini manuellement en utilisant la méthode QGraphicsAnchor::setSpacing().
L'appel à cette fonction lorsque firstItem ou secondItem sont des ancêtres de la mise en page a un comportement indéfini.
Voir aussi addAnchors() et addCornerAnchors().
void QGraphicsAnchorLayout::addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)
Ancrer deux ou quatre bords de firstItem avec les bords correspondants de secondItem, de manière à ce que firstItem ait la même taille que secondItem dans les dimensions spécifiées par orientations.
Par exemple, l'exemple suivant ancre les bords gauche et droit de deux éléments pour qu'ils correspondent à leur largeur :
layout->addAnchor(b, Qt::AnchorLeft, c, Qt::AnchorLeft); layout->addAnchor(b, Qt::AnchorRight, c, Qt::AnchorRight);
Cela 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, où l'un est pour le bord horizontal et l'autre pour le bord vertical.
Il s'agit d'une fonction pratique, car l'ancrage des coins peut être exprimé comme l'ancrage de deux bords. Par exemple :
layout->addAnchor(a, Qt::AnchorTop, layout, Qt::AnchorTop); layout->addAnchor(a, Qt::AnchorLeft, layout, Qt::AnchorLeft);
Ceci peut également être réalisé avec la ligne de code suivante :
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);
S'il existe déjà une ancre entre les paires d'arêtes, elle sera remplacée par les ancres spécifiées par cette fonction.
firstItem et secondItem sont automatiquement ajoutés à la mise en page s'ils n'en font pas 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 entre les points d'ancrage définis par firstItem et firstEdge et 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 de l'ancre.
Voir aussi 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 à 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 des ancres qui lui sont associées.
Voir aussi 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 pour la mise en page de l'ancre à spacing.
Voir aussi horizontalSpacing(), setVerticalSpacing() et setSpacing().
void QGraphicsAnchorLayout::setSpacing(qreal spacing)
Définit l'espacement horizontal et l'espacement vertical par défaut pour la mise en page de l'ancre à spacing.
Si un élément est ancré sans espacement associé à l'ancre, 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 de widget actuel.
Voir également setHorizontalSpacing() et setVerticalSpacing().
void QGraphicsAnchorLayout::setVerticalSpacing(qreal spacing)
Définit l'espacement vertical par défaut pour la mise en page de l'ancre à spacing.
Voir aussi 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 de l'ancre.
Voir aussi 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.