QGridLayout Class

Die Klasse QGridLayout ordnet Widgets in einem Raster an. Mehr...

Kopfzeile: #include <QGridLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Vererbt: QLayout

Eigenschaften

Öffentliche Funktionen

QGridLayout(QWidget *parent = nullptr)
virtual ~QGridLayout()
void addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())
void addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
void addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())
QRect cellRect(int row, int column) const
int columnCount() const
int columnMinimumWidth(int column) const
int columnStretch(int column) const
void getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const
int horizontalSpacing() const
QLayoutItem *itemAtPosition(int row, int column) const
Qt::Corner originCorner() const
int rowCount() const
int rowMinimumHeight(int row) const
int rowStretch(int row) const
void setColumnMinimumWidth(int column, int minSize)
void setColumnStretch(int column, int stretch)
void setHorizontalSpacing(int spacing)
void setOriginCorner(Qt::Corner corner)
void setRowMinimumHeight(int row, int minSize)
void setRowStretch(int row, int stretch)
void setVerticalSpacing(int spacing)
int verticalSpacing() const

Reimplementierte öffentliche Funktionen

virtual int count() const override
virtual Qt::Orientations expandingDirections() const override
virtual bool hasHeightForWidth() const override
virtual int heightForWidth(int w) const override
virtual void invalidate() override
virtual QLayoutItem *itemAt(int index) const override
virtual QSize maximumSize() const override
virtual int minimumHeightForWidth(int w) const override
virtual QSize minimumSize() const override
virtual void setGeometry(const QRect &rect) override
virtual void setSpacing(int spacing) override
virtual QSize sizeHint() const override
virtual int spacing() const override
virtual QLayoutItem *takeAt(int index) override

Reimplementierte geschützte Funktionen

virtual void addItem(QLayoutItem *item) override

Detaillierte Beschreibung

QGridLayout nimmt den ihm zur Verfügung gestellten Platz (durch sein übergeordnetes Layout oder durch parentWidget()), teilt ihn in Zeilen und Spalten auf und setzt jedes von ihm verwaltete Widget in die richtige Zelle.

Spalten und Zeilen verhalten sich identisch; wir werden die Spalten behandeln, aber es gibt äquivalente Funktionen für Zeilen.

Jede Spalte hat eine Mindestbreite und einen Streckungsfaktor. Die Mindestbreite ist der größte Wert, der mit setColumnMinimumWidth() und der Mindestbreite der einzelnen Widgets in dieser Spalte festgelegt wird. Der Dehnungsfaktor wird mit setColumnStretch() festgelegt und bestimmt, wie viel des verfügbaren Platzes die Spalte über ihr notwendiges Minimum hinaus erhält.

Normalerweise wird jedes verwaltete Widget oder Layout mit addWidget() in eine eigene Zelle gesetzt. Es ist auch möglich, dass ein Widget mehrere Zellen belegt, indem man die zeilen- und spaltenübergreifenden Überladungen von addItem() und addWidget() verwendet. Wenn Sie dies tun, wird QGridLayout erraten, wie die Größe über die Spalten/Zeilen zu verteilen ist (basierend auf den Streckfaktoren).

Um ein Widget aus einem Layout zu entfernen, rufen Sie removeWidget() auf. Der Aufruf von QWidget::hide() für ein Widget entfernt das Widget ebenfalls aus dem Layout, bis QWidget::show() aufgerufen wird.

Diese Abbildung zeigt ein Fragment eines Dialogs mit einem fünfspaltigen, dreizeiligen Raster (das Raster ist in Magenta überlagert):

A grid layout

Die Spalten 0, 2 und 4 in diesem Dialogfragment bestehen aus einer QLabel, einer QLineEdit und einer QListBox. Die Spalten 1 und 3 sind Platzhalter, die mit setColumnMinimumWidth() erstellt wurden. Zeile 0 besteht aus drei QLabel Objekten, Zeile 1 aus drei QLineEdit Objekten und Zeile 2 aus drei QListBox Objekten. Wir haben Platzhalterspalten (1 und 3) verwendet, um den richtigen Abstand zwischen den Spalten zu erhalten.

Beachten Sie, dass die Spalten und Zeilen nicht gleich breit oder hoch sind. Wenn Sie möchten, dass zwei Spalten die gleiche Breite haben, müssen Sie ihre Mindestbreiten und Streckungsfaktoren gleich einstellen. Dies tun Sie mit setColumnMinimumWidth() und setColumnStretch().

Wenn das QGridLayout nicht das Top-Level-Layout ist (d.h. nicht alle Bereiche und Kinder des Widgets verwaltet), müssen Sie es zu seinem übergeordneten Layout hinzufügen, wenn Sie es erstellen, aber bevor Sie irgendetwas mit ihm machen. Der normale Weg, ein Layout hinzuzufügen, ist der Aufruf von addLayout() für das übergeordnete Layout.

Sobald Sie Ihr Layout hinzugefügt haben, können Sie damit beginnen, Widgets und andere Layouts mit addWidget(), addItem() und addLayout() in die Zellen Ihres Grid-Layouts einzufügen.

QGridLayout enthält auch zwei Randbreiten: contents margin und spacing(). Der Inhaltsrand ist die Breite des reservierten Raums entlang jeder der vier Seiten des QGridLayouts. Die spacing() ist die Breite des automatisch zugewiesenen Abstands zwischen benachbarten Boxen.

Die Standardwerte für den Rand werden von style bereitgestellt. Der Standardwert, den Qt-Stile vorgeben, ist 9 für untergeordnete Widgets und 11 für Fenster. Der Abstand ist standardmäßig der gleiche wie die Randbreite für ein Layout der obersten Ebene oder der gleiche wie für das übergeordnete Layout.

Siehe auch QBoxLayout, QStackedLayout, Layout-Verwaltung und Beispiel für grundlegende Layouts.

Dokumentation der Eigenschaft

horizontalSpacing : int

Diese Eigenschaft bestimmt den Abstand zwischen Widgets, die nebeneinander angeordnet sind.

Wenn kein Wert explizit gesetzt wird, wird der horizontale Abstand des Layouts vom übergeordneten Layout oder von den Stileinstellungen für das übergeordnete Widget geerbt.

Zugriffsfunktionen:

int horizontalSpacing() const
void setHorizontalSpacing(int spacing)

Siehe auch verticalSpacing, QStyle::pixelMetric(), und PM_LayoutHorizontalSpacing.

verticalSpacing : int

Diese Eigenschaft legt den Abstand zwischen übereinander angeordneten Widgets fest.

Wenn kein Wert explizit gesetzt wird, wird der vertikale Abstand des Layouts vom übergeordneten Layout oder von den Stileinstellungen für das übergeordnete Widget geerbt.

Zugriffsfunktionen:

int verticalSpacing() const
void setVerticalSpacing(int spacing)

Siehe auch horizontalSpacing, QStyle::pixelMetric(), und PM_LayoutHorizontalSpacing.

Dokumentation der Mitgliedsfunktionen

[explicit] QGridLayout::QGridLayout(QWidget *parent = nullptr)

Konstruiert ein neues QGridLayout mit dem übergeordneten Widget parent. Das Layout hat zunächst eine Zeile und eine Spalte und wird erweitert, wenn neue Elemente eingefügt werden.

Das Layout wird direkt als Top-Level-Layout für parent festgelegt. Es kann nur ein Layout der obersten Ebene für ein Widget geben. Es wird von QWidget::layout() zurückgegeben.

Wenn parent nullptr ist, müssen Sie dieses Rasterlayout in ein anderes Layout einfügen oder es mit QWidget::setLayout() als Layout für ein Widget festlegen.

Siehe auch QWidget::setLayout().

[virtual noexcept] QGridLayout::~QGridLayout()

Zerstört das Rasterlayout. Die Geometrieverwaltung wird beendet, wenn es sich um ein Top-Level-Grid handelt.

Die Widgets des Layouts werden nicht zerstört.

[override virtual protected] void QGridLayout::addItem(QLayoutItem *item)

Reimplements: QLayout::addItem(QLayoutItem *item).

void QGridLayout::addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment alignment = Qt::Alignment())

Fügt item an der Position row, column ein, überspannt rowSpan Zeilen und columnSpan Spalten und richtet es gemäß alignment aus. Wenn rowSpan und/oder columnSpan den Wert -1 hat, reicht das Element bis zum unteren bzw. rechten Rand. Das Layout übernimmt das Eigentum an item.

Warnung: Verwenden Sie diese Funktion nicht, um untergeordnete Layouts oder untergeordnete Widgetelemente hinzuzufügen. Verwenden Sie stattdessen addLayout() oder addWidget().

void QGridLayout::addLayout(QLayout *layout, int row, int column, Qt::Alignment alignment = Qt::Alignment())

Platziert die layout an der Position (row, column) im Raster. Die obere linke Position ist (0, 0).

Die Ausrichtung wird durch alignment festgelegt. Die Standardausrichtung ist 0, was bedeutet, dass das Widget die gesamte Zelle ausfüllt.

Eine Ausrichtung ungleich Null zeigt an, dass das Layout nicht wachsen soll, um den verfügbaren Platz auszufüllen, sondern dass die Größe gemäß sizeHint() angepasst werden soll.

layout wird zu einem untergeordneten Element des Rasterlayouts.

void QGridLayout::addLayout(QLayout *layout, int row, int column, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

Dies ist eine überladene Funktion.

Diese Version fügt dem Zellenraster das Layout layout hinzu, das sich über mehrere Zeilen/Spalten erstreckt. Die Zelle beginnt bei row, column und erstreckt sich über rowSpan Zeilen und columnSpan Spalten.

Wenn rowSpan und/oder columnSpan gleich -1 ist, erstreckt sich das Layout bis zum unteren bzw. rechten Rand.

void QGridLayout::addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())

Fügt die angegebene widget dem Zellengitter an row, column hinzu. Die linke obere Position ist standardmäßig (0, 0).

Die Ausrichtung wird durch alignment festgelegt. Die Standardausrichtung ist 0, was bedeutet, dass das Widget die gesamte Zelle ausfüllt.

void QGridLayout::addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

Dies ist eine überladene Funktion.

Diese Version fügt die angegebene widget in das Zellengitter ein, das sich über mehrere Zeilen/Spalten erstreckt. Die Zelle beginnt bei fromRow, fromColumn und erstreckt sich über rowSpan Zeilen und columnSpan Spalten. Die widget hat die angegebene alignment.

Wenn rowSpan und/oder columnSpan gleich -1 ist, erstreckt sich das Widget bis zum unteren bzw. rechten Rand.

QRect QGridLayout::cellRect(int row, int column) const

Gibt die Geometrie der Zelle mit der Zeile row und der Spalte column im Raster zurück. Gibt ein ungültiges Rechteck zurück, wenn row oder column außerhalb des Gitters liegt.

Warnung: In der aktuellen Version von Qt gibt diese Funktion keine gültigen Ergebnisse zurück, bevor setGeometry() aufgerufen wurde, d.h. nachdem parentWidget() sichtbar ist.

int QGridLayout::columnCount() const

Gibt die Anzahl der Spalten in diesem Grid zurück.

int QGridLayout::columnMinimumWidth(int column) const

Gibt den Spaltenabstand für die Spalte column zurück.

Siehe auch setColumnMinimumWidth().

int QGridLayout::columnStretch(int column) const

Gibt den Streckungsfaktor für die Spalte column zurück.

Siehe auch setColumnStretch().

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

Reimplements: QLayout::count() const.

[override virtual] Qt::Orientations QGridLayout::expandingDirections() const

Reimplements: QLayout::expandingDirections() const.

void QGridLayout::getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const

Gibt die Positionsinformationen des Elements mit der angegebenen index zurück.

Die als row und column übergebenen Variablen werden mit der Position des Elements im Layout aktualisiert, und die Variablen rowSpan und columnSpan werden mit den vertikalen und horizontalen Abständen des Elements aktualisiert.

Siehe auch itemAtPosition() und itemAt().

[override virtual] bool QGridLayout::hasHeightForWidth() const

Reimplements: QLayoutItem::hasHeightForWidth() const.

[override virtual] int QGridLayout::heightForWidth(int w) const

Reimplements: QLayoutItem::heightForWidth(int) const.

[override virtual] void QGridLayout::invalidate()

Reimplements: QLayout::invalidate().

[override virtual] QLayoutItem *QGridLayout::itemAt(int index) const

Reimplements: QLayout::itemAt(int index) const.

QLayoutItem *QGridLayout::itemAtPosition(int row, int column) const

Gibt das Layoutelement zurück, das die Zelle (row, column) belegt, oder nullptr, wenn die Zelle leer ist.

Siehe auch getItemPosition() und indexOf().

[override virtual] QSize QGridLayout::maximumSize() const

Reimplements: QLayout::maximumSize() const.

[override virtual] int QGridLayout::minimumHeightForWidth(int w) const

Reimplements: QLayoutItem::minimumHeightForWidth(int w) const.

[override virtual] QSize QGridLayout::minimumSize() const

Reimplements: QLayout::minimumSize() const.

Qt::Corner QGridLayout::originCorner() const

Gibt die Ecke zurück, die für den Ursprung des Gitters verwendet wird, d.h. für die Position (0, 0).

Siehe auch setOriginCorner().

int QGridLayout::rowCount() const

Gibt die Anzahl der Zeilen in diesem Gitter zurück.

int QGridLayout::rowMinimumHeight(int row) const

Gibt die für die Zeile row festgelegte Mindestbreite zurück.

Siehe auch setRowMinimumHeight().

int QGridLayout::rowStretch(int row) const

Gibt den Streckungsfaktor für die Zeile row zurück.

Siehe auch setRowStretch().

void QGridLayout::setColumnMinimumWidth(int column, int minSize)

Setzt die Mindestbreite der Spalte column auf minSize Pixel.

Siehe auch columnMinimumWidth() und setRowMinimumHeight().

void QGridLayout::setColumnStretch(int column, int stretch)

Setzt den Streckungsfaktor der Spalte column auf stretch. Die erste Spalte hat die Nummer 0.

Der Streckungsfaktor ist relativ zu den anderen Spalten in diesem Raster. Spalten mit einem höheren Dehnungsfaktor nehmen mehr Platz in Anspruch.

Der Standard-Dehnungsfaktor ist 0. Wenn der Dehnungsfaktor 0 ist und keine andere Spalte in dieser Tabelle überhaupt wachsen kann, kann die Spalte trotzdem wachsen.

Ein alternativer Ansatz ist das Hinzufügen von Abstand mit addItem() und QSpacerItem.

Siehe auch columnStretch() und setRowStretch().

[override virtual] void QGridLayout::setGeometry(const QRect &rect)

Reimplements: QLayout::setGeometry(const QRect &r).

void QGridLayout::setOriginCorner(Qt::Corner corner)

Setzt die Ursprungsecke des Gitters, d.h. die Position (0, 0), auf corner.

Siehe auch originCorner().

void QGridLayout::setRowMinimumHeight(int row, int minSize)

Setzt die Mindesthöhe der Zeile row auf minSize Pixel.

Siehe auch rowMinimumHeight() und setColumnMinimumWidth().

void QGridLayout::setRowStretch(int row, int stretch)

Setzt den Streckungsfaktor der Zeile row auf stretch. Die erste Zeile hat die Nummer 0.

Der Streckungsfaktor ist relativ zu den anderen Zeilen in diesem Raster. Zeilen mit einem höheren Dehnungsfaktor nehmen mehr Platz in Anspruch.

Der Standard-Dehnungsfaktor ist 0. Wenn der Dehnungsfaktor 0 ist und keine andere Zeile in dieser Tabelle überhaupt wachsen kann, kann die Zeile trotzdem wachsen.

Siehe auch rowStretch(), setRowMinimumHeight(), und setColumnStretch().

[override virtual] void QGridLayout::setSpacing(int spacing)

Reimplementiert eine Zugriffsfunktion für die Eigenschaft: QLayout::spacing.

Diese Funktion setzt sowohl die vertikalen als auch die horizontalen Abstände auf spacing.

Siehe auch spacing(), setVerticalSpacing(), und setHorizontalSpacing().

[override virtual] QSize QGridLayout::sizeHint() const

Reimplements: QLayoutItem::sizeHint() const.

[override virtual] int QGridLayout::spacing() const

Reimplantiert eine Zugriffsfunktion für die Eigenschaft: QLayout::spacing.

Wenn der vertikale Abstand gleich dem horizontalen Abstand ist, gibt diese Funktion diesen Wert zurück; andernfalls gibt sie -1 zurück.

Siehe auch setSpacing(), verticalSpacing(), und horizontalSpacing().

[override virtual] QLayoutItem *QGridLayout::takeAt(int index)

Reimplements: QLayout::takeAt(int index).

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