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: |
Öffentliche Typen
enum | SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint } |
Eigenschaften
- sizeConstraint : SizeConstraint
- spacing : int
Ö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:
Konstante | Wert | Beschreibung |
---|---|---|
QLayout::SetDefaultConstraint | 0 | Die Mindestgröße des Hauptwidgets wird auf minimumSize() gesetzt, es sei denn, das Widget hat bereits eine Mindestgröße. |
QLayout::SetFixedSize | 3 | Die Größe des Hauptwidgets wird auf sizeHint() gesetzt; es kann überhaupt nicht in der Größe verändert werden. |
QLayout::SetMinimumSize | 2 | Die Mindestgröße des Hauptwidgets wird auf minimumSize() gesetzt; sie kann nicht kleiner werden. |
QLayout::SetMaximumSize | 4 | Die maximale Größe des Hauptwidgets ist auf maximumSize() festgelegt; sie kann nicht größer sein. |
QLayout::SetMinAndMaxSize | 5 | Die Mindestgröße des Hauptwidgets ist auf minimumSize() und seine Maximalgröße auf maximumSize() festgelegt. |
QLayout::SetNoConstraint | 1 | Das 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.
QWidget *QLayout::menuBar() const
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.