QGraphicsAnchorLayout Class
La clase QGraphicsAnchorLayout proporciona un diseño donde uno puede anclar widgets juntos en la Vista Gráfica. Más...
| Cabecera: | #include <QGraphicsAnchorLayout> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Hereda: | QGraphicsLayout |
Funciones Públicas
| 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 |
Funciones públicas reimplementadas
| 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 |
Funciones protegidas reimplementadas
| virtual QSizeF | sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override |
Descripción detallada
El diseño de anclaje permite a los desarrolladores especificar cómo deben colocarse los widgets entre sí y con respecto al propio diseño. La especificación se realiza añadiendo anclas al diseño llamando a addAnchor(), addAnchors() o addCornerAnchors().
Se puede acceder a las anclas existentes en la maqueta con la función anchor(). Los elementos anclados se añaden automáticamente a la maqueta, y si se eliminan elementos, se eliminarán automáticamente todas sus anclas.

Uso de un diseño de anclaje para alinear widgets de colores simples.
Las anclas siempre se colocan entre los bordes de un elemento, donde el "centro" también se considera un borde. Considere el siguiente ejemplo:
layout->addAnchor(b, Qt::AnchorLeft, a, Qt::AnchorRight); layout->addAnchor(b, Qt::AnchorTop, a, Qt::AnchorBottom);
Aquí, el borde derecho del elemento a se ancla al borde izquierdo del elemento b y el borde inferior del elemento a se ancla al borde superior del elemento b, con el resultado de que el elemento b se colocará diagonalmente a la derecha y debajo del elemento b.
La función addCornerAnchors() proporciona una forma más sencilla de anclar las esquinas de dos widgets que las dos llamadas individuales a addAnchor() mostradas en el código anterior. Aquí vemos cómo un widget puede anclarse a la esquina superior izquierda del diseño que lo rodea:
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);
En los casos en que los anclajes se utilizan para igualar las anchuras o alturas de los widgets, es conveniente utilizar la función addAnchors(). Al igual que las demás funciones para especificar anclajes, también puede utilizarse para anclar un widget a un diseño.
Sugerencias de tamaño y políticas de tamaño en un diseño de anclaje
QGraphicsAnchorLayout respeta las sugerencias y políticas de tamaño de cada elemento. Tenga en cuenta que hay algunas propiedades de QSizePolicy que son not respected.
Espaciado dentro de un diseño de anclaje
El layout puede distribuir algo de espacio entre los ítems. Si el espaciado no se ha especificado explícitamente, la cantidad real de espacio será normalmente 0.
Sin embargo, si el primer borde es el opuesto del segundo borde (por ejemplo, el borde derecho del primer widget está anclado al borde izquierdo del segundo widget), el tamaño del ancla se consultará desde el estilo a través de una métrica de píxeles: PM_LayoutHorizontalSpacing para anclas horizontales y PM_LayoutVerticalSpacing para anclas verticales.
Si el espaciado es negativo, los elementos se solaparán en cierta medida.
Problemas conocidos
Hay algunas características que QGraphicsAnchorLayout no soporta actualmente. Esto podría cambiar en el futuro, así que evita usar estas características si quieres evitar futuras regresiones en el comportamiento:
- No se respetan los factores de estiramiento.
- QSizePolicy::ExpandFlag no se respeta.
- No se respeta la altura para la anchura.
Véase también QGraphicsLinearLayout, QGraphicsGridLayout, y QGraphicsLayout.
Documentación de las funciones miembro
QGraphicsAnchorLayout::QGraphicsAnchorLayout(QGraphicsLayoutItem *parent = nullptr)
Construye una instancia de QGraphicsAnchorLayout. parent se pasa al constructor de QGraphicsLayout.
[virtual noexcept] QGraphicsAnchorLayout::~QGraphicsAnchorLayout()
Destruye el objeto QGraphicsAnchorLayout.
QGraphicsAnchor *QGraphicsAnchorLayout::addAnchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
Crea un ancla entre el borde firstEdge del elemento firstItem y el borde secondEdge del elemento secondItem. El espaciado del ancla se toma del estilo. Las anclas entre un borde de la presentación y un borde de un elemento tendrán un tamaño de 0. Si ya existe un ancla entre los bordes, la nueva ancla sustituirá a la anterior.
firstItem y secondItem se añaden automáticamente al diseño si no forman parte del mismo. Esto significa que count() puede aumentar hasta 2.
El espaciado que obtendrá un ancla dependerá del tipo de ancla. Por ejemplo, las anclas desde el borde derecho de un elemento hasta el borde izquierdo de otro (o viceversa) utilizarán el espaciado horizontal predeterminado. El mismo comportamiento se aplica a las anclas de abajo a arriba (pero utilizarán el espaciado vertical predeterminado). Para todas las demás combinaciones de anclaje, el espaciado será 0. Todas las funciones de anclaje seguirán esta regla.
El espaciado también puede establecerse manualmente utilizando el método QGraphicsAnchor::setSpacing().
Llamar a esta función cuando firstItem o secondItem son ancestros del layout tiene un comportamiento indefinido.
Véase también addAnchors() y addCornerAnchors().
void QGraphicsAnchorLayout::addAnchors(QGraphicsLayoutItem *firstItem, QGraphicsLayoutItem *secondItem, Qt::Orientations orientations = Qt::Horizontal | Qt::Vertical)
Ancla dos o cuatro bordes de firstItem con los bordes correspondientes de secondItem, de modo que firstItem tenga el mismo tamaño que secondItem en las dimensiones especificadas por orientations.
Por ejemplo, el siguiente ejemplo ancla los bordes izquierdo y derecho de dos elementos para que coincidan en anchura:
layout->addAnchor(b, Qt::AnchorLeft, c, Qt::AnchorLeft); layout->addAnchor(b, Qt::AnchorRight, c, Qt::AnchorRight);
Esto también puede conseguirse utilizando la siguiente línea de código:
layout->addAnchors(b, c, Qt::Horizontal);
Véase también addAnchor() y addCornerAnchors().
void QGraphicsAnchorLayout::addCornerAnchors(QGraphicsLayoutItem *firstItem, Qt::Corner firstCorner, QGraphicsLayoutItem *secondItem, Qt::Corner secondCorner)
Crea dos anclajes entre firstItem y secondItem especificados por las esquinas, firstCorner y secondCorner, donde uno es para la arista horizontal y otro para la vertical.
Se trata de una función práctica, ya que anclar esquinas puede expresarse como anclar dos aristas. Por ejemplo:
layout->addAnchor(a, Qt::AnchorTop, layout, Qt::AnchorTop); layout->addAnchor(a, Qt::AnchorLeft, layout, Qt::AnchorLeft);
Esto también se puede lograr con la siguiente línea de código:
layout->addCornerAnchors(a, Qt::TopLeftCorner, layout, Qt::TopLeftCorner);
Si ya hay un ancla entre los pares de aristas, será reemplazada por las anclas que especifica esta función.
firstItem y secondItem se añaden automáticamente al diseño si no forman parte del mismo. Esto significa que count() puede aumentar hasta 2.
Véase también addAnchor() y addAnchors().
QGraphicsAnchor *QGraphicsAnchorLayout::anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint firstEdge, QGraphicsLayoutItem *secondItem, Qt::AnchorPoint secondEdge)
Devuelve el ancla entre los puntos de anclaje definidos por firstItem y firstEdge y secondItem y secondEdge. Si no existe tal ancla, la función devolverá 0.
[override virtual] int QGraphicsAnchorLayout::count() const
Reimplementa: QGraphicsLayout::count() const.
qreal QGraphicsAnchorLayout::horizontalSpacing() const
Devuelve el espaciado horizontal por defecto para el diseño del ancla.
Véase también verticalSpacing() y setHorizontalSpacing().
[override virtual] void QGraphicsAnchorLayout::invalidate()
Reimplementa: QGraphicsLayout::invalidate().
[override virtual] QGraphicsLayoutItem *QGraphicsAnchorLayout::itemAt(int index) const
Reimplementa: QGraphicsLayout::itemAt(int i) const.
[override virtual] void QGraphicsAnchorLayout::removeAt(int index)
Reimplementa: QGraphicsLayout::removeAt(int índice).
Elimina el elemento de diseño en index sin destruirlo. La propiedad del elemento se transfiere a quien lo llama.
Al eliminar un elemento también se eliminarán las anclas asociadas a él.
Véase también itemAt() y count().
[override virtual] void QGraphicsAnchorLayout::setGeometry(const QRectF &geom)
Reimplementa: QGraphicsLayoutItem::setGeometry(const QRectF &rect).
void QGraphicsAnchorLayout::setHorizontalSpacing(qreal spacing)
Establece el espaciado horizontal predeterminado para el diseño de anclaje en spacing.
Véase también horizontalSpacing(), setVerticalSpacing() y setSpacing().
void QGraphicsAnchorLayout::setSpacing(qreal spacing)
Establece el espaciado horizontal y vertical por defecto para el diseño de anclaje en spacing.
Si un elemento está anclado sin espaciado asociado al ancla, utilizará el espaciado por defecto.
QGraphicsAnchorLayout no admite espaciados negativos. Establecer un valor negativo anulará el espaciado anterior y hará que el diseño utilice el espaciado proporcionado por el estilo de widget actual.
Véase también setHorizontalSpacing() y setVerticalSpacing().
void QGraphicsAnchorLayout::setVerticalSpacing(qreal spacing)
Establece el espaciado vertical predeterminado para el diseño de anclaje en spacing.
Véase también verticalSpacing(), setHorizontalSpacing() y setSpacing().
[override virtual protected] QSizeF QGraphicsAnchorLayout::sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
Reimplementa: QGraphicsLayoutItem::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const.
qreal QGraphicsAnchorLayout::verticalSpacing() const
Devuelve el espaciado vertical por defecto para el diseño del ancla.
Véase también horizontalSpacing() y 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.