QGraphicsLayout Class
La clase QGraphicsLayout proporciona la clase base para todos los diseños en la Vista Gráfica. Más...
| Cabecera: | #include <QGraphicsLayout> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Hereda: | QGraphicsLayoutItem |
| Heredado por: | QGraphicsAnchorLayout, QGraphicsGridLayout, y QGraphicsLinearLayout |
Funciones Públicas
| QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr) | |
| virtual | ~QGraphicsLayout() |
| void | activate() |
| virtual int | count() const = 0 |
| virtual void | invalidate() |
| bool | isActivated() const |
| virtual QGraphicsLayoutItem * | itemAt(int i) const = 0 |
| virtual void | removeAt(int index) = 0 |
| void | setContentsMargins(qreal left, qreal top, qreal right, qreal bottom) |
| virtual void | widgetEvent(QEvent *e) |
Funciones públicas reimplementadas
| virtual void | getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const override |
| virtual void | updateGeometry() override |
Funciones protegidas
| void | addChildLayoutItem(QGraphicsLayoutItem *layoutItem) |
Descripción Detallada
QGraphicsLayout es una clase abstracta que define una API virtual para organizar QGraphicsWidget hijos y otros objetos QGraphicsLayoutItem para un QGraphicsWidget. QGraphicsWidget asigna la responsabilidad a un QGraphicsLayout a través de QGraphicsWidget::setLayout(). Cuando el widget cambia de tamaño, el layout organiza automáticamente los hijos del widget. QGraphicsLayout hereda QGraphicsLayoutItem, por lo que puede ser gestionado por cualquier layout, incluyendo sus propias subclases.
Escribiendo un diseño personalizado
Puedes usar QGraphicsLayout como base para escribir tu propio layout personalizado (por ejemplo, un flowlayout), pero es más común usar una de sus subclases en su lugar - QGraphicsLinearLayout o QGraphicsGridLayout. Cuando se crea un layout personalizado, las siguientes funciones deben ser reimplementadas como mínimo:
| Función | Descripción |
|---|---|
| QGraphicsLayoutItem::setGeometry() | Notifica cuando se establece la geometría del diseño. Puede almacenar la geometría en su propia clase de diseño reimplementando esta función. |
| QGraphicsLayoutItem::sizeHint() | Devuelve las sugerencias de tamaño del layout. |
| QGraphicsLayout::count() | Devuelve el número de elementos de la maqueta. |
| QGraphicsLayout::itemAt() | Devuelve un puntero a un elemento de la presentación. |
| QGraphicsLayout::removeAt() | Elimina un elemento de la presentación sin destruirlo. |
Para más detalles sobre cómo implementar cada función, consulte la documentación de cada una de ellas.
Cada diseño define su propia API para organizar los widgets y elementos del diseño. Por ejemplo, con un diseño de rejilla, se requiere un índice de fila y columna con espacios opcionales de fila y columna, alineación, espaciado y más. Un diseño lineal, sin embargo, requiere un único índice de fila o columna para colocar sus elementos. Para un diseño de cuadrícula, el orden de inserción no afecta al diseño de ninguna manera, pero para un diseño lineal, el orden es esencial. Cuando escribas tu propia subclase de diseño, eres libre de elegir la API que mejor se adapte a tu diseño.
QGraphicsLayout proporciona la función addChildLayoutItem() para añadir elementos a un diseño personalizado. La función reparentará automáticamente los elementos gráficos, si es necesario.
Activando el diseño
Cuando la geometría de la maqueta cambia, QGraphicsLayout reordena inmediatamente todos sus elementos gestionados llamando a setGeometry() en cada elemento. Este reordenamiento se llama activación del layout.
QGraphicsLayout actualiza su propia geometría para que coincida con contentsRect() del QGraphicsLayoutItem que está gestionando. Así, reordenará automáticamente todos sus elementos cuando el widget cambie de tamaño. QGraphicsLayout almacena en caché los tamaños de todos sus elementos gestionados para evitar llamar a setGeometry() con demasiada frecuencia.
Nota: Un QGraphicsLayout tendrá la misma geometría que el contentsRect() del widget (no del layout) al que está asignado.
Activando el Layout Implícitamente
El diseño puede activarse implícitamente de dos formas: llamando a activate() o llamando a invalidate(). Si se llama a activate(), la presentación se activa inmediatamente. Por el contrario, la llamada a invalidate() se retrasa, ya que envía un evento LayoutRequest al widget gestionado. Debido a la compresión de eventos, activate() sólo será llamado una vez después de que el control haya vuelto al bucle de eventos. Esto se conoce como invalidar el diseño. Invalidar el diseño también invalida cualquier información almacenada en caché. Además, la función invalidate() es una función virtual. Por tanto, puedes invalidar tu propia caché en una subclase de QGraphicsLayout reimplementando esta función.
Manejo de Eventos
QGraphicsLayout escucha los eventos del widget que maneja a través del manejador de eventos virtual widgetEvent(). Cuando el diseño es asignado a un widget, todos los eventos enviados al widget son procesados primero por widgetEvent(). Esto permite al diseño estar al tanto de cualquier cambio de estado relevante en el widget, como cambios de visibilidad o cambios de dirección del diseño.
Gestión de márgenes
Los márgenes de un QGraphicsLayout pueden ser modificados reimplementando setContentsMargins() y getContentsMargins().
Documentación de Funciones Miembro
QGraphicsLayout::QGraphicsLayout(QGraphicsLayoutItem *parent = nullptr)
Construye un objeto QGraphicsLayout.
parent se pasa al constructor de QGraphicsLayoutItem y el argumento isLayout de QGraphicsLayoutItem se establece a true.
Si parent es un QGraphicsWidget el layout será instalado en ese widget. (Ten en cuenta que al instalar un layout se borrará el anterior instalado).
[virtual noexcept] QGraphicsLayout::~QGraphicsLayout()
Destruye el objeto QGraphicsLayout.
void QGraphicsLayout::activate()
Activa la presentación, haciendo que todos los elementos de la presentación se reorganicen inmediatamente. Esta función se basa en llamar a count() y itemAt(), y luego llamar a setGeometry() en todos los elementos secuencialmente. Cuando se activa, el diseño ajustará su geometría a la de su padre contentsRect(). El padre invalidará cualquier layout propio.
Si se llama de forma secuencial o recursiva, por ejemplo, por uno de los elementos dispuestos en respuesta a un cambio de tamaño, esta función no hará nada.
Tenga en cuenta que el diseño es libre de utilizar la caché de geometría para optimizar este proceso. Para invalidar forzosamente cualquier caché de este tipo, puede llamar a invalidate() antes de llamar a activate().
Véase también invalidate().
[protected] void QGraphicsLayout::addChildLayoutItem(QGraphicsLayoutItem *layoutItem)
Esta función es una función de conveniencia proporcionada para diseños personalizados, e irá a través de todos los elementos en el diseño y reparent sus elementos gráficos a la más cercana QGraphicsWidget antepasado del diseño.
Si layoutItem ya está en un diseño diferente, se eliminará de ese diseño.
Si las maquetaciones personalizadas desean un comportamiento especial, pueden ignorar el uso de esta función e implementar su propio comportamiento.
Véase también graphicsItem().
[pure virtual] int QGraphicsLayout::count() const
Esta función virtual pura debe reimplementarse en una subclase de QGraphicsLayout para devolver el número de elementos de la presentación.
La subclase es libre de decidir cómo almacenar los elementos.
Véase también itemAt() y removeAt().
[override virtual] void QGraphicsLayout::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const
Reimplementa: QGraphicsLayoutItem::getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const.
[virtual] void QGraphicsLayout::invalidate()
Borra cualquier información de geometría y tamaño almacenada en caché en el diseño, y envía un evento LayoutRequest al padre gestionado QGraphicsLayoutItem.
Véase también activate() y setGeometry().
bool QGraphicsLayout::isActivated() const
Devuelve true si la presentación se está activando; en caso contrario, devuelve false. Si la presentación se está activando, significa que está en proceso de reordenar sus elementos (es decir, se ha llamado a la función activate(), que aún no ha devuelto).
Véase también activate() y invalidate().
[pure virtual] QGraphicsLayoutItem *QGraphicsLayout::itemAt(int i) const
Esta función virtual pura debe reimplementarse en una subclase de QGraphicsLayout para devolver un puntero al elemento en el índice i. La reimplementación puede asumir que i es válido (es decir, respeta el valor de count()). Junto con count(), se proporciona como medio para iterar sobre todos los elementos de una presentación.
La subclase es libre de decidir cómo almacenar los elementos, y la disposición visual no tiene por qué reflejarse a través de esta función.
Véase también count() y removeAt().
[pure virtual] void QGraphicsLayout::removeAt(int index)
Esta función virtual pura debe reimplementarse en una subclase de QGraphicsLayout para eliminar el elemento en index. La reimplementación puede asumir que index es válido (es decir, respeta el valor de count()).
La implementación debe asegurarse de que parentLayoutItem() del elemento eliminado no apunta a esta disposición, ya que el elemento se considera eliminado de la jerarquía de disposiciones.
Si el diseño se va a reutilizar entre aplicaciones, recomendamos que el diseño elimine el elemento, pero el marco de vista gráfica no depende de esto.
La subclase es libre de decidir cómo almacenar los elementos.
Véase también itemAt() y count().
void QGraphicsLayout::setContentsMargins(qreal left, qreal top, qreal right, qreal bottom)
Establece los márgenes de contenido en left, top, right y bottom. Los márgenes de contenido por defecto para los diseños de nivel superior dependen del estilo (consultando el pixelMetric para QStyle::PM_LayoutLeftMargin, QStyle::PM_LayoutTopMargin, QStyle::PM_LayoutRightMargin y QStyle::PM_LayoutBottomMargin).
Para los diseños secundarios, los márgenes por defecto son 0.
La modificación de los márgenes de contenido invalida automáticamente la presentación.
Véase también invalidate().
[override virtual] void QGraphicsLayout::updateGeometry()
Reimplementa: QGraphicsLayoutItem::updateGeometry().
[virtual] void QGraphicsLayout::widgetEvent(QEvent *e)
Este manejador de eventos virtual recibe todos los eventos del widget gestionado. QGraphicsLayout utiliza este manejador de eventos para escuchar eventos relacionados con el diseño, como cambios de geometría, cambios de diseño o cambios de dirección del diseño.
e es un puntero al evento.
Puedes reimplementar este manejador de eventos para seguir eventos similares para tu propio diseño personalizado.
Véase también QGraphicsWidget::event() y QGraphicsItem::sceneEvent().
© 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.