QGraphicsAnchorLayout Class
Die Klasse „QGraphicsAnchorLayout“ bietet ein Layout, mit dem man Widgets in der Graphics View miteinander verankern kann. Mehr...
| Header: | #include <QGraphicsAnchorLayout> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Erbt: | QGraphicsLayout |
Öffentliche Funktionen
| 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 |
Neu implementierte öffentliche Funktionen
| 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 |
Neu implementierte geschützte Funktionen
| virtual QSizeF | sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override |
Ausführliche Beschreibung
Das Anker-Layout ermöglicht es Entwicklern, festzulegen, wie Widgets relativ zueinander und zum Layout selbst platziert werden sollen. Die Festlegung erfolgt durch Hinzufügen von Ankern zum Layout mittels der Aufrufe von ` addAnchor()`, ` addAnchors()` oder ` addCornerAnchors()`.
Auf bereits im Layout vorhandene Anker kann mit der Funktion ` anchor()` zugegriffen werden. Verankerte Elemente werden automatisch zum Layout hinzugefügt, und wenn Elemente entfernt werden, werden alle zugehörigen Anker automatisch entfernt.

Verwendung eines Anker-Layouts zum Ausrichten einfacher farbiger Widgets.
Anker werden immer zwischen den Rändern eines Elements gesetzt, wobei auch die „Mitte“ als Rand betrachtet wird. Betrachten Sie das folgende Beispiel:
layout->addAnchor(b, Qt::AnchorLeft, a, Qt::AnchorRight);
layout->addAnchor(b, Qt::AnchorTop, a, Qt::AnchorBottom);Hier ist die rechte Kante des Elements a an der linken Kante des Elements b verankert und die untere Kante des Elements a an der oberen Kante des Elements b, was dazu führt, dass das Element b diagonal rechts und unterhalb des Elements b platziert wird.
Die Funktion ` addCornerAnchors()` bietet eine einfachere Möglichkeit, die Ecken zweier Widgets zu verankern, als die beiden im obigen Code gezeigten einzelnen Aufrufe von ` addAnchor()`. Hier sehen wir, wie ein Widget an der oberen linken Ecke des umgebenden Layouts verankert werden kann:
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);In Fällen, in denen Anker verwendet werden, um die Breiten oder Höhen von Widgets anzupassen, ist es praktisch, die Funktion ` addAnchors()` zu verwenden. Wie bei den anderen Funktionen zur Festlegung von Ankern kann sie auch verwendet werden, um ein Widget an einem Layout zu verankern.
Größenhinweise und Größenrichtlinien in einem Anchor-Layout
QGraphicsAnchorLayout berücksichtigt die Größenhinweise und Größenrichtlinien jedes Elements. Beachten Sie, dass einige Eigenschaften von ` QSizePolicy ` als „ not respected “ gelten.
Abstand innerhalb eines Anchor-Layouts
Das Layout kann etwas Abstand zwischen den Elementen verteilen. Wenn der Abstand nicht explizit festgelegt wurde, beträgt der tatsächliche Abstand in der Regel 0.
Ist jedoch die erste Kante das Gegenteil der zweiten Kante (z. B. ist die rechte Kante des ersten Widgets an der linken Kante des zweiten Widgets verankert), wird die Größe der Verankerung über eine Pixelmetrik aus dem Stil abgefragt: „ PM_LayoutHorizontalSpacing “ für horizontale Verankerungen und „ PM_LayoutVerticalSpacing “ für vertikale Verankerungen.
Ist der Abstand negativ, überlappen sich die Elemente in gewissem Maße.
Bekannte Probleme
Es gibt einige Funktionen, die QGraphicsAnchorLayout derzeit nicht unterstützt. Dies könnte sich in Zukunft ändern; vermeiden Sie daher die Verwendung dieser Funktionen, wenn Sie zukünftige Regressionen im Verhalten verhindern möchten:
- Dehnungsfaktoren werden nicht berücksichtigt.
- QSizePolicy::ExpandFlag wird nicht berücksichtigt.
- Die Angabe „Höhe für Breite“ wird nicht berücksichtigt.
Siehe auch QGraphicsLinearLayout, QGraphicsGridLayout und QGraphicsLayout.
Dokumentation der Member-Funktionen
QGraphicsAnchorLayout::QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr)
Erstellt eine Instanz von `QGraphicsAnchorLayout`. ` parent ` wird an den Konstruktor von ` QGraphicsLayout` übergeben.
[virtual noexcept] QGraphicsAnchorLayout::~QGraphicsAnchorLayout()
Löscht das „ QGraphicsAnchorLayout “-Objekt.
QGraphicsAnchor *QGraphicsAnchorLayout::addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
Erstellt einen Anker zwischen der Kante firstEdge des Elements firstItem und der Kante secondEdge des Elements secondItem. Der Abstand des Ankers wird aus dem Stil übernommen. Anker zwischen einer Layoutkante und einer Elementkante haben die Größe 0. Befindet sich bereits ein Anker zwischen den Kanten, ersetzt der neue Anker den alten.
firstItem und secondItem werden automatisch zum Layout hinzugefügt, sofern sie nicht bereits Teil des Layouts sind. Das bedeutet, dass sich count() um bis zu 2 erhöhen kann.
Der Abstand, den ein Anker erhält, hängt vom Anker-Typ ab. Beispielsweise verwenden Anker vom rechten Rand eines Elements zum linken Rand eines anderen (oder umgekehrt) den standardmäßigen horizontalen Abstand. Das gleiche Verhalten gilt für Anker von unten nach oben (dabei wird jedoch der standardmäßige vertikale Abstand verwendet). Bei allen anderen Verankerungskombinationen beträgt der Abstand 0. Alle Verankerungsfunktionen folgen dieser Regel.
Der Abstand kann auch manuell mithilfe der Methode ` QGraphicsAnchor::setSpacing()` festgelegt werden.
Der Aufruf dieser Funktion, wenn „ firstItem “ oder „ secondItem “ Vorfahren des Layouts sind, führt zu undefiniertem Verhalten.
Siehe auch addAnchors() und addCornerAnchors().
void QGraphicsAnchorLayout::addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)
Verankert zwei oder vier Kanten von firstItem an den entsprechenden Kanten von secondItem, sodass firstItem in den durch orientations festgelegten Abmessungen dieselbe Größe wie secondItem hat.
Im folgenden Beispiel werden beispielsweise die linken und rechten Ränder zweier Elemente so verankert, dass ihre Breiten übereinstimmen:
layout->addAnchor(b, Qt::AnchorLeft, c, Qt::AnchorLeft);
layout->addAnchor(b, Qt::AnchorRight, c, Qt::AnchorRight);Dies lässt sich auch mit der folgenden Codezeile erreichen:
layout->addAnchors(b, c, Qt::Horizontal);Siehe auch addAnchor() und addCornerAnchors().
void QGraphicsAnchorLayout::addCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner)
Erstellt zwei Anker zwischen firstItem und secondItem, die durch die Ecken firstCorner und secondCorner festgelegt sind, wobei einer für die horizontale Kante und der andere für die vertikale Kante bestimmt ist.
Dies ist eine Komfortfunktion, da das Verankern von Ecken als Verankern zweier Kanten ausgedrückt werden kann. Zum Beispiel:
layout->addAnchor(a, Qt::AnchorTop, layout, Qt::AnchorTop);
layout->addAnchor(a, Qt::AnchorLeft, layout, Qt::AnchorLeft);Dies lässt sich auch mit der folgenden Codezeile erreichen:
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);Wenn zwischen den Kantenpaaren bereits ein Anker vorhanden ist, wird dieser durch die von dieser Funktion angegebenen Anker ersetzt.
firstItem und „ secondItem “ werden automatisch zum Layout hinzugefügt, sofern sie noch nicht Teil des Layouts sind. Das bedeutet, dass „ count()“ um bis zu 2 ansteigen kann.
Siehe auch addAnchor() und addAnchors().
QGraphicsAnchor *QGraphicsAnchorLayout::anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
Gibt den Anker zwischen den Ankerpunkten zurück, die durch firstItem, firstEdge, secondItem und secondEdge definiert sind. Falls kein solcher Anker vorhanden ist, gibt die Funktion 0 zurück.
[override virtual] int QGraphicsAnchorLayout::count() const
Implementiert: ` QGraphicsLayout::count()` const.
qreal QGraphicsAnchorLayout::horizontalSpacing() const
Gibt den Standard-Horizontalabstand für das Anker-Layout zurück.
Siehe auch „ verticalSpacing()“ und „ setHorizontalSpacing()“.
[override virtual] void QGraphicsAnchorLayout::invalidate()
Implementiert: QGraphicsLayout::invalidate().
[override virtual] QGraphicsLayoutItem *QGraphicsAnchorLayout::itemAt(int index) const
Implementiert neu: ` QGraphicsLayout::itemAt(int i) const`.
[override virtual] void QGraphicsAnchorLayout::removeAt(int index)
Implementiert: QGraphicsLayout::removeAt(int index).
Entfernt das Layout-Element unter index, ohne es zu zerstören. Das Eigentumsrecht an dem Element wird auf den Aufrufer übertragen.
Durch das Entfernen eines Elements werden auch alle damit verknüpften Anker entfernt.
Siehe auch „ itemAt()“ und „ count()“.
[override virtual] void QGraphicsAnchorLayout::setGeometry(const QRectF &geom)
Implementiert: ` QGraphicsLayoutItem::setGeometry` (`const QRectF &rect`).
void QGraphicsAnchorLayout::setHorizontalSpacing(qreal spacing)
Legt den Standard-Horizontalabstand für das Ankerlayout auf „ spacing “ fest.
Siehe auch „ horizontalSpacing()“, „ setVerticalSpacing()“ und „ setSpacing()“.
void QGraphicsAnchorLayout::setSpacing(qreal spacing)
Legt den standardmäßigen horizontalen und vertikalen Abstand für das Ankerlayout auf „ spacing “ fest.
Wenn ein Element verankert wird, ohne dass dem Anker ein Abstand zugewiesen ist, wird der Standardabstand verwendet.
QGraphicsAnchorLayout Negative Abstände werden nicht unterstützt. Durch die Festlegung eines negativen Werts wird der bisherige Abstand aufgehoben und das Layout verwendet den vom aktuellen Widget-Stil vorgegebenen Abstand.
Siehe auch „ setHorizontalSpacing()“ und „ setVerticalSpacing()“.
void QGraphicsAnchorLayout::setVerticalSpacing(qreal spacing)
Legt den Standard-Vertikalabstand für das Anker-Layout auf „ spacing “ fest.
Siehe auch „ verticalSpacing()“, „ setHorizontalSpacing()“ und „ setSpacing()“.
[override virtual protected] QSizeF QGraphicsAnchorLayout::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
Implementiert neu: ` QGraphicsLayoutItem::sizeHint` (`Qt::SizeHint which, const QSizeF &constraint) const`.
qreal QGraphicsAnchorLayout::verticalSpacing() const
Gibt den Standard-Vertikalabstand für das Anker-Layout zurück.
Siehe auch horizontalSpacing() und 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.