QLayout Class

Die Klasse QLayout ist die Basisklasse der Geometriemanager. Mehr...

Kopfzeile: #include <QLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Erbt: QObject und QLayoutItem
Geerbt von:

QBoxLayout, QFormLayout, QGridLayout, und QStackedLayout

Öffentliche Typen

enum SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint }

Eigenschaften

Öffentliche Funktionen

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
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 setMenuBar(QWidget *widget)
void setSizeConstraint(QLayout::SizeConstraint)
virtual void setSpacing(int)
QLayout::SizeConstraint sizeConstraint() const
virtual int spacing() const
virtual QLayoutItem *takeAt(int index) = 0
(since 6.1) void unsetContentsMargins()
void update()

Reimplementierte öffentliche Funktionen

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

Statische öffentliche Mitglieder

QSize closestAcceptableSize(const QWidget *widget, const QSize &size)

Geschützte Funktionen

void addChildLayout(QLayout *childLayout)
void addChildWidget(QWidget *w)
QRect alignmentRect(const QRect &r) const

Reimplementierte geschützte Funktionen

virtual void childEvent(QChildEvent *e) override

Detaillierte Beschreibung

Dies ist eine abstrakte Basisklasse, die an die konkreten Klassen QBoxLayout, QGridLayout, QFormLayout, und QStackedLayout vererbt wird.

Für Benutzer von QLayout-Unterklassen oder von QMainWindow besteht nur selten die Notwendigkeit, die von QLayout bereitgestellten Grundfunktionen wie setSizeConstraint() oder setMenuBar() zu verwenden. Siehe Layout Management für weitere Informationen.

Um Ihren eigenen Layout-Manager zu erstellen, implementieren Sie die Funktionen addItem(), sizeHint(), setGeometry(), itemAt() und takeAt(). Sie sollten auch minimumSize() implementieren, um sicherzustellen, dass Ihr Layout nicht auf die Größe Null zurückgesetzt wird, wenn zu wenig Platz vorhanden ist. Um Kinder zu unterstützen, deren Höhe von ihrer Breite abhängt, implementieren Sie hasHeightForWidth() und heightForWidth(). Weitere Informationen zur Implementierung benutzerdefinierter Layout-Manager finden Sie im Flow-Layout-Beispiel.

Die Geometrieverwaltung wird beendet, wenn der Layoutmanager gelöscht wird.

Siehe auch QLayoutItem, Layoutverwaltung, Beispiel für Basislayouts und Beispiel für Flusslayout.

Member-Typ-Dokumentation

enum QLayout::SizeConstraint

Die möglichen Werte sind:

KonstanteWertBeschreibung
QLayout::SetDefaultConstraint0Die Mindestgröße des Hauptwidgets wird auf minimumSize() gesetzt, es sei denn, das Widget hat bereits eine Mindestgröße.
QLayout::SetFixedSize3Die Größe des Hauptwidgets wird auf sizeHint() gesetzt; es kann überhaupt nicht in der Größe verändert werden.
QLayout::SetMinimumSize2Die Mindestgröße des Hauptwidgets wird auf minimumSize() gesetzt; sie kann nicht kleiner werden.
QLayout::SetMaximumSize4Die maximale Größe des Hauptwidgets ist auf maximumSize() festgelegt; sie kann nicht größer sein.
QLayout::SetMinAndMaxSize5Die Mindestgröße des Hauptwidgets ist auf minimumSize() und seine Maximalgröße auf maximumSize() festgelegt.
QLayout::SetNoConstraint1Das Widget ist nicht eingeschränkt.

Siehe auch setSizeConstraint().

Dokumentation der Eigenschaft

sizeConstraint : SizeConstraint

Diese Eigenschaft enthält den Größenänderungsmodus des Layouts

Der Standardmodus ist SetDefaultConstraint.

Zugriffsfunktionen:

QLayout::SizeConstraint sizeConstraint() const
void setSizeConstraint(QLayout::SizeConstraint)

spacing : int

Diese Eigenschaft legt den Abstand zwischen den Widgets im Layout fest.

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

Für QGridLayout und QFormLayout ist es möglich, unterschiedliche horizontale und vertikale Abstände mit setHorizontalSpacing() und setVerticalSpacing() zu setzen. In diesem Fall gibt spacing() -1 zurück.

Zugriffsfunktionen:

virtual int spacing() const
virtual void setSpacing(int)

Siehe auch contentsRect(), getContentsMargins(), QStyle::layoutSpacing(), und QStyle::pixelMetric().

Dokumentation der Mitgliedsfunktionen

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

Konstruiert ein neues QLayout der obersten Ebene, mit übergeordnetem parent.

Das Layout wird direkt als Layout der obersten Ebene 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 Layout in ein anderes Layout einfügen oder es mit QWidget::setLayout() als Layout für ein Widget festlegen.

Siehe auch QWidget::setLayout().

bool QLayout::activate()

Erneuert das Layout für parentWidget(), falls erforderlich.

In der Regel ist es nicht erforderlich, diese Funktion aufzurufen, da sie automatisch zu den am besten geeigneten Zeitpunkten aufgerufen wird. Es gibt true zurück, wenn das Layout neu erstellt wurde.

Siehe auch update() und QWidget::updateGeometry().

[protected] void QLayout::addChildLayout(QLayout *childLayout)

Diese Funktion wird von den Funktionen addLayout() oder insertLayout() in Unterklassen aufgerufen, um das Layout childLayout als Unterlayout hinzuzufügen.

Das einzige Szenario, in dem Sie sie direkt aufrufen müssen, ist, wenn Sie ein benutzerdefiniertes Layout implementieren, das verschachtelte Layouts unterstützt.

Siehe auch QBoxLayout::addLayout(), QBoxLayout::insertLayout(), und QGridLayout::addLayout().

[protected] void QLayout::addChildWidget(QWidget *w)

Diese Funktion wird von addWidget() Funktionen in Unterklassen aufgerufen, um w als ein verwaltetes Widget eines Layouts hinzuzufügen.

Wenn w bereits von einem Layout verwaltet wird, erzeugt diese Funktion eine Warnung und entfernt w aus diesem Layout. Diese Funktion muss daher vor dem Hinzufügen von w zur Datenstruktur des Layouts aufgerufen werden.

[pure virtual] void QLayout::addItem(QLayoutItem *item)

Wird in Unterklassen implementiert, um ein item hinzuzufügen. Wie es hinzugefügt wird, ist für jede Unterklasse spezifisch.

Diese Funktion wird normalerweise nicht im Anwendungscode aufgerufen. Um ein Widget zu einem Layout hinzuzufügen, verwenden Sie die Funktion addWidget(); um ein untergeordnetes Layout hinzuzufügen, verwenden Sie die Funktion addLayout(), die von der entsprechenden QLayout Unterklasse bereitgestellt wird.

Hinweis: Die Eigentümerschaft von item wird an das Layout übertragen, und es liegt in der Verantwortung des Layouts, es zu löschen.

Siehe auch addWidget(), QBoxLayout::addLayout(), und QGridLayout::addLayout().

void QLayout::addWidget(QWidget *w)

Fügt diesem Layout das Widget w in einer für das Layout spezifischen Weise hinzu. Diese Funktion verwendet addItem().

[protected] QRect QLayout::alignmentRect(const QRect &r) const

Gibt das Rechteck zurück, das abgedeckt werden soll, wenn die Geometrie dieses Layouts auf r gesetzt wird, vorausgesetzt, dieses Layout unterstützt setAlignment().

Das Ergebnis wird von sizeHint() und expandingDirections() abgeleitet. Es ist nie größer als r.

[override virtual protected] void QLayout::childEvent(QChildEvent *e)

Reimplements: QObject::childEvent(QChildEvent *event).

[static] QSize QLayout::closestAcceptableSize(const QWidget *widget, const QSize &size)

Gibt eine Größe zurück, die alle Größenbeschränkungen für widget erfüllt, einschließlich heightForWidth(), und die so nah wie möglich an size liegt.

QMargins QLayout::contentsMargins() const

Gibt die um das Layout verwendeten Ränder zurück.

Standardmäßig verwendet QLayout die vom Stil bereitgestellten Werte. Auf den meisten Plattformen beträgt der Rand 11 Pixel in alle Richtungen.

Hinweis: Getter-Funktion für die Eigenschaft contentsMargins.

Siehe auch setContentsMargins().

QRect QLayout::contentsRect() const

Gibt das Rechteck des Layouts geometry() zurück, jedoch unter Berücksichtigung der Ränder des Inhalts.

Siehe auch setContentsMargins() und getContentsMargins().

[override virtual] QSizePolicy::ControlTypes QLayout::controlTypes() const

Reimplements: QLayoutItem::controlTypes() const.

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

Muss in Unterklassen implementiert werden, um die Anzahl der Elemente im Layout zurückzugeben.

Siehe auch itemAt().

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

Reimplements: QLayoutItem::expandingDirections() const.

Gibt zurück, ob dieses Layout mehr Platz als sizeHint() beanspruchen kann. Ein Wert von Qt::Vertical oder Qt::Horizontal bedeutet, dass es nur in einer Dimension wachsen will, während Qt::Vertical | Qt::Horizontal bedeutet, dass es in beiden Dimensionen wachsen will.

Die Standardimplementierung gibt Qt::Horizontal | Qt::Vertical zurück. Unterklassen implementieren es neu, um einen sinnvollen Wert basierend auf den size policies ihrer Kind-Widgets zurückzugeben.

Siehe auch sizeHint().

[override virtual] QRect QLayout::geometry() const

Reimplements: QLayoutItem::geometry() const.

Siehe auch setGeometry().

void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) const

Für jedes left, top, right und bottom, das nicht nullptr ist, wird die Größe des Randes gespeichert, der an der Stelle angegeben ist, auf die sich der Zeiger bezieht.

Standardmäßig verwendet QLayout die vom Stil vorgegebenen Werte. Auf den meisten Plattformen beträgt der Rand 11 Pixel in alle Richtungen.

Siehe auch setContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin, und PM_LayoutBottomMargin.

[virtual] int QLayout::indexOf(const QLayoutItem *layoutItem) const

Sucht nach dem Layoutelement layoutItem in diesem Layout (ohne untergeordnete Layouts).

Gibt den Index von layoutItem zurück, oder -1, wenn layoutItem nicht gefunden wird.

[virtual] int QLayout::indexOf(const QWidget *widget) const

Sucht nach dem Widget widget in diesem Layout (ohne untergeordnete Layouts).

Gibt den Index von widget zurück, oder -1, wenn widget nicht gefunden wird.

Die Standardimplementierung iteriert über alle Elemente mit itemAt().

[override virtual] void QLayout::invalidate()

Reimplements: QLayoutItem::invalidate().

[override virtual] bool QLayout::isEmpty() const

Reimplements: QLayoutItem::isEmpty() const.

bool QLayout::isEnabled() const

Gibt true zurück, wenn das Layout aktiviert ist; andernfalls wird false zurückgegeben.

Siehe auch setEnabled().

[pure virtual] QLayoutItem *QLayout::itemAt(int index) const

Muss in Unterklassen implementiert werden, um das Layoutelement unter index zurückzugeben. Wenn es kein solches Element gibt, muss die Funktion nullptr zurückgeben. Elemente werden von 0 an fortlaufend nummeriert. Wird ein Element gelöscht, werden andere Elemente neu nummeriert.

Diese Funktion kann verwendet werden, um über ein Layout zu iterieren. Der folgende Code zeichnet ein Rechteck für jedes Layoutelement in der Layoutstruktur des Widgets.

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());
}

Siehe auch count() und takeAt().

[override virtual] QLayout *QLayout::layout()

Reimplements: QLayoutItem::layout().

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

Reimplements: QLayoutItem::maximumSize() const.

Gibt die maximale Größe dieses Layouts zurück. Dies ist die größte Größe, die das Layout haben kann, ohne die Spezifikationen zu verletzen.

Der zurückgegebene Wert enthält nicht den von QWidget::setContentsMargins() oder menuBar() benötigten Platz.

Die Standardimplementierung erlaubt eine unbegrenzte Größenänderung.

Gibt die für dieses Layout eingestellte Menüleiste zurück, oder nullptr, wenn keine Menüleiste eingestellt ist.

Siehe auch setMenuBar().

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

Reimplements: QLayoutItem::minimumSize() const.

Gibt die Mindestgröße dieses Layouts zurück. Dies ist die kleinste Größe, die das Layout haben kann, ohne die Spezifikationen zu verletzen.

Der zurückgegebene Wert enthält nicht den von QWidget::setContentsMargins() oder menuBar() benötigten Platz.

Die Standardimplementierung erlaubt eine unbegrenzte Größenänderung.

QWidget *QLayout::parentWidget() const

Gibt das übergeordnete Widget dieses Layouts zurück, oder nullptr, wenn dieses Layout auf keinem Widget installiert ist.

Wenn das Layout ein Unterlayout ist, gibt diese Funktion das übergeordnete Widget des übergeordneten Layouts zurück.

Siehe auch parent().

void QLayout::removeItem(QLayoutItem *item)

Entfernt das Layoutelement item aus dem Layout. Es liegt in der Verantwortung des Aufrufers, das Element zu löschen.

Beachten Sie, dass item ein Layout sein kann (da QLayout QLayoutItem erbt).

Siehe auch removeWidget() und addItem().

void QLayout::removeWidget(QWidget *widget)

Entfernt das Widget widget aus dem Layout. Nach diesem Aufruf liegt es in der Verantwortung des Aufrufers, dem Widget eine angemessene Geometrie zu geben oder das Widget wieder in ein Layout einzufügen oder es, falls erforderlich, explizit auszublenden.

Hinweis: Die Eigentümerschaft von widget bleibt dieselbe wie beim Hinzufügen des Widgets.

Siehe auch removeItem(), QWidget::setGeometry(), und addWidget().

[virtual] QLayoutItem *QLayout::replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)

Sucht nach dem Widget from und ersetzt es durch das Widget to, falls gefunden. Gibt bei Erfolg das Layoutelement zurück, das das Widget from enthält. Andernfalls wird nullptr zurückgegeben. Wenn options Qt::FindChildrenRecursively enthält (die Vorgabe), werden Unterlayouts für die Ersetzung durchsucht. Jedes andere Flag in options wird ignoriert.

Beachten Sie, dass das zurückgegebene Element daher möglicherweise nicht zu diesem Layout gehört, sondern zu einem Unterlayout.

Das zurückgegebene Layoutelement gehört nicht mehr zu diesem Layout und sollte entweder gelöscht oder in ein anderes Layout eingefügt werden. Das Widget from wird nicht mehr von dem Layout verwaltet und muss möglicherweise gelöscht oder ausgeblendet werden. Das Elternteil des Widgets from bleibt unverändert.

Diese Funktion funktioniert für die eingebauten Qt-Layouts, aber möglicherweise nicht für benutzerdefinierte Layouts.

Siehe auch indexOf().

bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment)

Setzt die Ausrichtung für das Widget w auf alignment und gibt true zurück, wenn w in diesem Layout (ohne untergeordnete Layouts) gefunden wird; andernfalls wird false zurückgegeben.

bool QLayout::setAlignment(QLayout *l, Qt::Alignment alignment)

Dies ist eine überladene Funktion.

Setzt die Ausrichtung für das Layout l auf alignment und gibt true zurück, wenn l in diesem Layout gefunden wird (ohne untergeordnete Layouts); andernfalls gibt sie false zurück.

void QLayout::setContentsMargins(const QMargins &margins)

Legt die margins fest, die um das Layout herum verwendet werden soll.

Standardmäßig verwendet QLayout die vom Stil bereitgestellten Werte. Auf den meisten Plattformen beträgt der Rand 11 Pixel in alle Richtungen.

Hinweis: Setter-Funktion für die Eigenschaft contentsMargins.

Siehe auch contentsMargins().

void QLayout::setContentsMargins(int left, int top, int right, int bottom)

Legt die Ränder left, top, right und bottom fest, die um das Layout herum verwendet werden sollen.

Standardmäßig verwendet QLayout die vom Stil bereitgestellten Werte. Auf den meisten Plattformen beträgt der Rand 11 Pixel in alle Richtungen.

Hinweis: Setter-Funktion für die Eigenschaft contentsMargins.

Siehe auch getContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin, und PM_LayoutBottomMargin.

void QLayout::setEnabled(bool enable)

Aktiviert dieses Layout, wenn enable wahr ist, andernfalls wird es deaktiviert.

Ein aktiviertes Layout passt sich dynamisch an Änderungen an; ein deaktiviertes Layout verhält sich so, als würde es nicht existieren.

Standardmäßig sind alle Layouts aktiviert.

Siehe auch isEnabled().

[override virtual] void QLayout::setGeometry(const QRect &r)

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

Siehe auch geometry().

void QLayout::setMenuBar(QWidget *widget)

Weist den Geometriemanager an, die Menüleiste widget am oberen Rand von parentWidget() zu platzieren, außerhalb von QWidget::contentsMargins(). Alle untergeordneten Widgets werden unterhalb des unteren Randes der Menüleiste platziert.

Siehe auch menuBar().

[pure virtual] QLayoutItem *QLayout::takeAt(int index)

Muss in Unterklassen implementiert werden, um das Layoutelement unter index aus dem Layout zu entfernen und das Element zurückzugeben. Gibt es kein solches Element, muss die Funktion nichts tun und 0 zurückgeben. Elemente werden von 0 an fortlaufend nummeriert. Wenn ein Element entfernt wird, werden andere Elemente neu nummeriert.

Das folgende Codefragment zeigt eine sichere Methode zum Entfernen aller Elemente aus einem Layout:

QLayoutItem *child;
while ((child = layout->takeAt(0)) != nullptr) {
    ...
    delete child->widget(); // delete the widget
    delete child;   // delete the layout item
}

Siehe auch itemAt() und count().

[since 6.1] void QLayout::unsetContentsMargins()

Hebt alle benutzerdefinierten Ränder um das Layout auf. Das Layout verwendet die vom Stil bereitgestellten Standardwerte.

Hinweis: Rücksetzfunktion für die Eigenschaft contentsMargins.

Diese Funktion wurde in Qt 6.1 eingeführt.

Siehe auch setContentsMargins().

void QLayout::update()

Aktualisiert das Layout für parentWidget().

In der Regel sollten Sie diese Funktion nicht aufrufen müssen, da sie automatisch zu den am besten geeigneten Zeitpunkten aufgerufen wird.

Siehe auch activate() und invalidate().

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