Sur cette page

QGraphicsLayout Class

La classe QGraphicsLayout est la classe de base pour toutes les mises en page de la vue graphique. Plus d'informations...

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

QGraphicsAnchorLayout, QGraphicsGridLayout, et QGraphicsLinearLayout

Fonctions publiques

QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr)
virtual ~QGraphicsLayout()
void activate()
virtual int count() const = 0
virtual void invalidate()
bool isActivated() const
virtual QGraphicsLayoutItem *itemAt(int i) const = 0
virtual void removeAt(int index) = 0
void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)
virtual void widgetEvent(QEvent *e)

Fonctions publiques réimplémentées

virtual void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const override
virtual void updateGeometry() override

Fonctions protégées

void addChildLayoutItem(QGraphicsLayoutItem *layoutItem)

Description détaillée

QGraphicsLayout est une classe abstraite qui définit une API virtuelle permettant d'organiser les enfants QGraphicsWidget et d'autres objets QGraphicsLayoutItem pour un QGraphicsWidget. QGraphicsWidget attribue la responsabilité à un QGraphicsLayout par l'intermédiaire de QGraphicsWidget::setLayout(). Lorsque le widget est redimensionné, le layout organise automatiquement les enfants du widget. QGraphicsLayout hérite de QGraphicsLayoutItem, il peut donc être géré par n'importe quelle disposition, y compris ses propres sous-classes.

Écrire une présentation personnalisée

Vous pouvez utiliser QGraphicsLayout comme base pour écrire votre propre présentation personnalisée (par exemple, un flowlayout), mais il est plus courant d'utiliser l'une de ses sous-classes à la place - QGraphicsLinearLayout ou QGraphicsGridLayout. Lors de la création d'une présentation personnalisée, les fonctions suivantes doivent être réimplémentées au strict minimum :

FonctionDescription
QGraphicsLayoutItem::setGeometry()Vous avertit lorsque la géométrie de la mise en page est définie. Vous pouvez stocker la géométrie dans votre propre classe de disposition dans une réimplémentation de cette fonction.
QGraphicsLayoutItem::sizeHint()Renvoie les indices de taille de la disposition.
QGraphicsLayout::count()Renvoie le nombre d'éléments de la disposition.
QGraphicsLayout::itemAt()Renvoie un pointeur sur un élément de la présentation.
QGraphicsLayout::removeAt()Supprime un élément de la disposition sans le détruire.

Pour plus de détails sur la mise en œuvre de chaque fonction, reportez-vous à la documentation correspondante.

Chaque disposition définit sa propre API pour l'agencement des widgets et des éléments de la disposition. Par exemple, dans le cas d'une disposition en grille, vous avez besoin d'un index de ligne et de colonne, ainsi que d'espacements de ligne et de colonne facultatifs, d'un alignement, d'un espacement, etc. Une mise en page linéaire, en revanche, nécessite un seul indice de ligne ou de colonne pour positionner ses éléments. Pour une disposition en grille, l'ordre d'insertion n'affecte en rien la disposition, mais pour une disposition linéaire, l'ordre est essentiel. Lorsque vous écrivez votre propre sous-classe de disposition, vous êtes libre de choisir l'API qui convient le mieux à votre disposition.

QGraphicsLayout fournit la fonction de commodité addChildLayoutItem() pour ajouter des éléments de mise en page à une mise en page personnalisée. Cette fonction répartit automatiquement les éléments graphiques, si nécessaire.

Activation de la mise en page

Lorsque la géométrie de la disposition change, QGraphicsLayout réorganise immédiatement tous les éléments gérés en appelant setGeometry() sur chaque élément. Ce réarrangement s'appelle l'activation de la disposition.

QGraphicsLayout met à jour sa propre géométrie pour qu'elle corresponde à contentsRect() de l'élément QGraphicsLayoutItem qu'il gère. Ainsi, il réorganise automatiquement tous ses éléments lorsque le widget est redimensionné. QGraphicsLayout met en cache les tailles de tous les éléments qu'il gère afin d'éviter d'appeler setGeometry() trop souvent.

Remarque : un QGraphicsLayout aura la même géométrie que le contentsRect() du widget (et non du layout) auquel il est assigné.

Activation implicite de la disposition

La disposition peut être activée implicitement de deux manières : en appelant activate() ou en appelant invalidate(). L'appel à activate() active la disposition immédiatement. En revanche, l'appel à invalidate() est retardé, car il envoie un événement LayoutRequest au widget géré. En raison de la compression des événements, activate() ne sera appelé qu'une seule fois après le retour du contrôle dans la boucle d'événements. C'est ce qu'on appelle l'invalidation de la mise en page. L'invalidation de la disposition invalide également toutes les informations mises en cache. Par ailleurs, la fonction invalidate() est une fonction virtuelle. Vous pouvez donc invalider votre propre cache dans une sous-classe de QGraphicsLayout en réimplémentant cette fonction.

Gestion des événements

QGraphicsLayout est à l'écoute des événements pour le widget qu'il gère par le biais du gestionnaire d'événements virtuel widgetEvent(). Lorsque la disposition est affectée à un widget, tous les événements fournis au widget sont d'abord traités par widgetEvent(). Cela permet à la disposition d'être au courant de tout changement d'état pertinent sur le widget, tel que les changements de visibilité ou de direction de la disposition.

Gestion des marges

Les marges d'un QGraphicsLayout peuvent être modifiées en réimplémentant setContentsMargins() et getContentsMargins().

Documentation des fonctions membres

QGraphicsLayout::QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr)

Construit un objet QGraphicsLayout.

parent est transmis au constructeur de QGraphicsLayoutItem et l'argument isLayout de QGraphicsLayoutItem est fixé à true.

Si parent est un QGraphicsWidget, la disposition sera installée sur ce widget. (Notez que l'installation d'une disposition supprime l'ancienne disposition installée).

[virtual noexcept] QGraphicsLayout::~QGraphicsLayout()

Détruit l'objet QGraphicsLayout.

void QGraphicsLayout::activate()

Active la disposition, ce qui a pour effet de réorganiser immédiatement tous les éléments de la disposition. Cette fonction est basée sur l'appel de count() et itemAt(), puis sur l'appel de setGeometry() sur tous les éléments de manière séquentielle. Lorsqu'elle est activée, la disposition ajuste sa géométrie en fonction de la fonction contentsRect() de son parent. Le parent invalide alors toute disposition qu'il possède.

Si elle est appelée de manière séquentielle ou récursive, par exemple par l'un des éléments agencés en réponse à un redimensionnement, cette fonction ne fera rien.

Notez que la disposition est libre d'utiliser la mise en cache de la géométrie pour optimiser ce processus. Pour invalider de force un tel cache, vous pouvez appeler invalidate() avant d'appeler activate().

Voir aussi invalidate().

[protected] void QGraphicsLayout::addChildLayoutItem(QGraphicsLayoutItem *layoutItem)

Cette fonction est une fonction de commodité fournie pour les mises en page personnalisées. Elle passe en revue tous les éléments de la mise en page et reporte leurs éléments graphiques sur l'ancêtre QGraphicsWidget le plus proche de la mise en page.

Si layoutItem se trouve déjà dans une disposition différente, il sera supprimé de cette disposition.

Si des mises en page personnalisées souhaitent un comportement particulier, elles peuvent ignorer cette fonction et implémenter leur propre comportement.

Voir aussi graphicsItem().

[pure virtual] int QGraphicsLayout::count() const

Cette fonction virtuelle pure doit être réimplémentée dans une sous-classe de QGraphicsLayout afin de renvoyer le nombre d'éléments dans la présentation.

La sous-classe est libre de décider comment stocker les éléments.

Voir également itemAt() et removeAt().

[override virtual] void QGraphicsLayout::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const

Réimplémente : QGraphicsLayoutItem::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const.

[virtual] void QGraphicsLayout::invalidate()

Efface toutes les informations de géométrie et de taille mises en cache dans la disposition et envoie un événement LayoutRequest au parent géré QGraphicsLayoutItem.

Voir aussi activate() et setGeometry().

bool QGraphicsLayout::isActivated() const

Renvoie true si la disposition est en cours d'activation ; sinon, renvoie false. Si la disposition est activée, cela signifie qu'elle est en train de réorganiser ses éléments (c'est-à-dire que la fonction activate() a été appelée et n'a pas encore été renvoyée).

Voir également activate() et invalidate().

[pure virtual] QGraphicsLayoutItem *QGraphicsLayout::itemAt(int i) const

Cette fonction virtuelle pure doit être réimplémentée dans une sous-classe de QGraphicsLayout pour renvoyer un pointeur sur l'élément à l'index i. La réimplémentation peut supposer que i est valide (c'est-à-dire qu'elle respecte la valeur de count()). Avec count(), il est fourni comme moyen d'itérer sur tous les éléments d'une disposition.

La sous-classe est libre de décider comment stocker les éléments, et la disposition visuelle n'a pas à être reflétée par cette fonction.

Voir également count() et removeAt().

[pure virtual] void QGraphicsLayout::removeAt(int index)

Cette fonction virtuelle pure doit être réimplémentée dans une sous-classe de QGraphicsLayout pour supprimer l'élément à index. La réimplémentation peut supposer que index est valide (c'est-à-dire qu'elle respecte la valeur de count()).

L'implémentation doit s'assurer que le parentLayoutItem() de l'élément supprimé ne pointe pas vers cette disposition, puisque l'élément est considéré comme supprimé de la hiérarchie des dispositions.

Si la disposition doit être réutilisée par d'autres applications, nous recommandons que la disposition supprime l'élément, mais le cadre des vues graphiques n'en dépend pas.

La sous-classe est libre de décider comment stocker les éléments.

Voir également itemAt() et count().

void QGraphicsLayout::setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)

Définit les marges de contenu à left, top, right et bottom. Les marges de contenu par défaut pour les mises en page de premier niveau dépendent du style (en interrogeant le pixelMetric pour QStyle::PM_LayoutLeftMargin, QStyle::PM_LayoutTopMargin, QStyle::PM_LayoutRightMargin et QStyle::PM_LayoutBottomMargin).

Pour les sous-mises en page, les marges par défaut sont de 0.

La modification des marges de contenu invalide automatiquement la présentation.

Voir aussi invalidate().

[override virtual] void QGraphicsLayout::updateGeometry()

Réimplémente : QGraphicsLayoutItem::updateGeometry().

[virtual] void QGraphicsLayout::widgetEvent(QEvent *e)

Ce gestionnaire d'événements virtuel reçoit tous les événements pour le widget géré. QGraphicsLayout utilise ce gestionnaire d'événements pour écouter les événements liés à la mise en page tels que les changements de géométrie, les changements de mise en page ou les changements de direction de la mise en page.

e est un pointeur sur l'événement.

Vous pouvez réimplémenter ce gestionnaire d'événements pour suivre des événements similaires pour votre propre mise en page.

Voir aussi QGraphicsWidget::event() et QGraphicsItem::sceneEvent().

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