QLayout Class
La clase QLayout es la clase base de los gestores de geometría. Más...
| Cabecera: | #include <QLayout> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| Hereda: | QObject y QLayoutItem |
| Heredado de: |
Tipos públicos
| enum | SizeConstraint { SetDefaultConstraint, SetFixedSize, SetMinimumSize, SetMaximumSize, SetMinAndMaxSize, SetNoConstraint } |
Propiedades
|
|
Funciones públicas
| 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 |
| QLayout::SizeConstraint | horizontalSizeConstraint() 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 | setHorizontalSizeConstraint(QLayout::SizeConstraint constraint) |
| void | setMenuBar(QWidget *widget) |
| void | setSizeConstraint(QLayout::SizeConstraint constraint) |
(since 6.10) void | setSizeConstraints(QLayout::SizeConstraint horizontal, QLayout::SizeConstraint vertical) |
| virtual void | setSpacing(int) |
| void | setVerticalSizeConstraint(QLayout::SizeConstraint constraint) |
| QLayout::SizeConstraint | sizeConstraint() const |
| virtual int | spacing() const |
| virtual QLayoutItem * | takeAt(int index) = 0 |
(since 6.1) void | unsetContentsMargins() |
| void | update() |
| QLayout::SizeConstraint | verticalSizeConstraint() const |
Funciones públicas reimplementadas
| 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 |
Miembros públicos estáticos
| QSize | closestAcceptableSize(const QWidget *widget, const QSize &size) |
Funciones protegidas
| void | addChildLayout(QLayout *childLayout) |
| void | addChildWidget(QWidget *w) |
| QRect | alignmentRect(const QRect &r) const |
Funciones protegidas reimplementadas
| virtual void | childEvent(QChildEvent *e) override |
Descripción detallada
Esta es una clase base abstracta heredada por las clases concretas QBoxLayout, QGridLayout, QFormLayout, y QStackedLayout.
Para los usuarios de subclases de QLayout o de QMainWindow rara vez hay necesidad de utilizar las funciones básicas proporcionadas por QLayout, como setSizeConstraint() o setMenuBar(). Ver Layout Management para más información.
Para hacer tu propio gestor de layout, implementa las funciones addItem(), sizeHint(), setGeometry(), itemAt() y takeAt(). También deberías implementar minimumSize() para asegurarte de que tu layout no se redimensiona a tamaño cero si hay muy poco espacio. Para que los hijos tengan una altura que dependa de su anchura, implementa hasHeightForWidth() y heightForWidth(). Consulta el ejemplo Flow Layout para obtener más información sobre la implementación de gestores de diseño personalizados.
La gestión de geometrías se detiene cuando se elimina el gestor de diseño.
Véase también QLayoutItem, Gestión de diseños, Ejemplo de diseños básicos y Ejemplo de Flow Layout.
Documentación de tipos de miembros
enum QLayout::SizeConstraint
Describe cómo el diseño limita el tamaño del widget.
Una restricción vertical afecta a la altura del widget, mientras que una restricción horizontal afecta a su anchura.
Los valores posibles son:
| Constante | Valor | Descripción |
|---|---|---|
QLayout::SetDefaultConstraint | 0 | En la(s) orientación(es) restringida(s), la extensión mínima del widget se establece en minimumSize(), a menos que ya se haya establecido un tamaño mínimo. |
QLayout::SetFixedSize | 3 | En la(s) orientación(es) restringida(s), la extensión del widget se establece en sizeHint(), y no se puede redimensionar en esa dirección. |
QLayout::SetMinimumSize | 2 | En la(s) orientación(es) restringida(s), la extensión mínima del widget se establece en minimumSize(). |
QLayout::SetMaximumSize | 4 | En las orientaciones limitadas, la extensión máxima del widget es maximumSize(). |
QLayout::SetMinAndMaxSize | 5 | En la(s) orientación(es) restringida(s), la extensión mínima del widget se establece en minimumSize(), y la extensión máxima se establece en maximumSize(). |
QLayout::SetNoConstraint | 1 | No se aplican restricciones de tamaño al widget. |
Véase también setSizeConstraint(), setSizeConstraints(), horizontalSizeConstraint(), setHorizontalSizeConstraint() y setVerticalSizeConstraint().
Documentación de propiedades
contentsMargins : QMargins
Esta propiedad contiene los márgenes utilizados alrededor del diseño.
Por defecto, QLayout utiliza los valores proporcionados por el estilo. En la mayoría de las plataformas, el margen es de 11 píxeles en todas las direcciones.
Funciones de acceso:
| QMargins | contentsMargins() const |
| void | setContentsMargins(int left, int top, int right, int bottom) |
| void | setContentsMargins(const QMargins &margins) |
| void | unsetContentsMargins() |
Véase también setContentsMargins() y getContentsMargins().
[since 6.10] horizontalSizeConstraint : SizeConstraint
Esta propiedad contiene la restricción de tamaño horizontal.
El modo por defecto es QLayout::SetDefaultConstraint
Esta propiedad se introdujo en Qt 6.10.
Funciones de acceso:
| QLayout::SizeConstraint | horizontalSizeConstraint() const |
| void | setHorizontalSizeConstraint(QLayout::SizeConstraint constraint) |
Véase también verticalSizeConstraint() y sizeConstraint().
sizeConstraint : SizeConstraint
Esta propiedad contiene el modo de redimensionamiento del diseño. Establece la restricción de tamaño para el diálogo. Establecer una restricción de tamaño vertical u horizontal anulará esto.
El modo por defecto es SetDefaultConstraint.
Funciones de acceso:
| QLayout::SizeConstraint | sizeConstraint() const |
| void | setSizeConstraint(QLayout::SizeConstraint constraint) |
Véase también horizontalSizeConstraint() y verticalSizeConstraint().
spacing : int
Esta propiedad contiene el espaciado entre los widgets dentro del diseño.
Si no se establece ningún valor explícitamente, el espaciado de la maquetación se hereda de la maquetación padre, o de los ajustes de estilo del widget padre.
Para QGridLayout y QFormLayout, es posible establecer diferentes espaciados horizontales y verticales utilizando setHorizontalSpacing() y setVerticalSpacing(). En ese caso, spacing() devuelve -1.
Funciones de acceso:
| virtual int | spacing() const |
| virtual void | setSpacing(int) |
Véase también contentsRect(), getContentsMargins(), QStyle::layoutSpacing() y QStyle::pixelMetric().
[since 6.10] verticalSizeConstraint : SizeConstraint
Esta propiedad contiene la restricción de tamaño vertical.
El modo por defecto es QLayout::SetDefaultConstraint
Esta propiedad se introdujo en Qt 6.10.
Funciones de acceso:
| QLayout::SizeConstraint | verticalSizeConstraint() const |
| void | setVerticalSizeConstraint(QLayout::SizeConstraint constraint) |
Véase también horizontalSizeConstraint() y sizeConstraint().
Documentación de las funciones miembro
[explicit] QLayout::QLayout(QWidget *parent = nullptr)
Construye un nuevo QLayout de nivel superior, con el padre parent.
El diseño se establece directamente como el diseño de nivel superior para parent. Sólo puede haber un diseño de nivel superior para un widget. Es devuelto por QWidget::layout().
Si parent es nullptr, entonces debes insertar este layout en otro layout, o establecerlo como layout de un widget usando QWidget::setLayout().
Véase también QWidget::setLayout().
bool QLayout::activate()
Rehace el diseño de parentWidget() si es necesario.
Generalmente no debería ser necesario llamarlo porque se llama automáticamente en los momentos más apropiados. Devuelve true si se ha rehecho el diseño.
Véase también update() y QWidget::updateGeometry().
[protected] void QLayout::addChildLayout(QLayout *childLayout)
Esta función se llama desde las funciones addLayout() o insertLayout() en subclases para añadir la maqueta childLayout como una submaqueta.
La única situación en la que es necesario llamarla directamente es si se implementa un diseño personalizado que admita diseños anidados.
Véase también QBoxLayout::addLayout(), QBoxLayout::insertLayout(), y QGridLayout::addLayout().
[protected] void QLayout::addChildWidget(QWidget *w)
Esta función es llamada desde las funciones addWidget() en subclases para añadir w como widget gestionado de un diseño.
Si w ya está gestionado por un diseño, esta función producirá una advertencia y eliminará w de ese diseño. Por lo tanto, esta función debe invocarse antes de añadir w a la estructura de datos de la presentación.
[pure virtual] void QLayout::addItem(QLayoutItem *item)
Implementada en subclases para añadir un item. La forma de añadirlo es específica de cada subclase.
Esta función no suele llamarse en el código de la aplicación. Para añadir un widget a un diseño, utilice la función addWidget(); para añadir un diseño hijo, utilice la función addLayout() proporcionada por la subclase QLayout correspondiente.
Nota: La propiedad de item se transfiere a la maquetación, y es responsabilidad de la maquetación eliminarlo.
Véase también addWidget(), QBoxLayout::addLayout(), y QGridLayout::addLayout().
void QLayout::addWidget(QWidget *w)
Añade el widget w a este diseño de forma específica para el diseño. Esta función utiliza addItem().
[protected] QRect QLayout::alignmentRect(const QRect &r) const
Devuelve el rectángulo que debe cubrirse cuando la geometría de este diseño se establece en r, siempre que este diseño admita setAlignment().
El resultado se deriva de sizeHint() y expandingDirections(). Nunca es mayor que r.
[override virtual protected] void QLayout::childEvent(QChildEvent *e)
Reimplementa: QObject::childEvent(QChildEvent *event).
[static] QSize QLayout::closestAcceptableSize(const QWidget *widget, const QSize &size)
Devuelve un tamaño que satisface todas las restricciones de tamaño de widget, incluido heightForWidth() y que es lo más parecido posible a size.
QMargins QLayout::contentsMargins() const
Devuelve los márgenes utilizados alrededor del diseño.
Por defecto, QLayout utiliza los valores proporcionados por el estilo. En la mayoría de las plataformas, el margen es de 11 píxeles en todas las direcciones.
Nota: Función Getter para la propiedad contentsMargins.
Véase también setContentsMargins().
QRect QLayout::contentsRect() const
Devuelve el rectángulo de la maqueta geometry(), pero teniendo en cuenta los márgenes del contenido.
Véase también setContentsMargins() y getContentsMargins().
[override virtual] QSizePolicy::ControlTypes QLayout::controlTypes() const
Reimplementa: QLayoutItem::controlTypes() const.
[pure virtual] int QLayout::count() const
Debe implementarse en las subclases para devolver el número de elementos de la presentación.
Véase también itemAt().
[override virtual] Qt::Orientations QLayout::expandingDirections() const
Reimplementa: QLayoutItem::expandingDirections() const.
Devuelve si este diseño puede hacer uso de más espacio que sizeHint(). Un valor de Qt::Vertical o Qt::Horizontal significa que quiere crecer en una sola dimensión, mientras que Qt::Vertical | Qt::Horizontal significa que quiere crecer en ambas dimensiones.
La implementación por defecto devuelve Qt::Horizontal | Qt::Vertical. Las subclases lo reimplementan para devolver un valor significativo basado en los widgets hijos size policies.
Véase también sizeHint().
[override virtual] QRect QLayout::geometry() const
Reimplementa: QLayoutItem::geometry() const.
Ver también setGeometry().
void QLayout::getContentsMargins(int *left, int *top, int *right, int *bottom) const
Para cada uno de left, top, right y bottom que no sea nullptr, almacena el tamaño del margen nombrado en la ubicación a la que se refiere el puntero.
Por defecto, QLayout utiliza los valores proporcionados por el estilo. En la mayoría de las plataformas, el margen es de 11 píxeles en todas las direcciones.
Véase también setContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin, y PM_LayoutBottomMargin.
[virtual] int QLayout::indexOf(const QLayoutItem *layoutItem) const
Busca el elemento de diseño layoutItem en este diseño (sin incluir diseños hijos).
Devuelve el índice de layoutItem, o -1 si no se encuentra layoutItem.
[virtual] int QLayout::indexOf(const QWidget *widget) const
Busca el widget widget en este diseño (sin incluir diseños hijo).
Devuelve el índice de widget, o -1 si no se encuentra widget.
La implementación por defecto itera sobre todos los elementos usando itemAt().
[override virtual] void QLayout::invalidate()
Reimplementa: QLayoutItem::invalidate().
[override virtual] bool QLayout::isEmpty() const
Reimplementa: QLayoutItem::isEmpty() const.
bool QLayout::isEnabled() const
Devuelve true si el diseño está habilitado; en caso contrario devuelve false.
Véase también setEnabled().
[pure virtual] QLayoutItem *QLayout::itemAt(int index) const
Debe implementarse en las subclases para devolver el elemento de diseño en index. Si no existe tal elemento, la función debe devolver nullptr. Los elementos se numeran consecutivamente desde 0. Si se elimina un elemento, se renumerarán los demás.
Esta función puede utilizarse para iterar sobre un diseño. El siguiente código dibujará un rectángulo para cada elemento de la estructura del widget.
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()); }
Véase también count() y takeAt().
[override virtual] QLayout *QLayout::layout()
Reimplementa: QLayoutItem::layout().
[override virtual] QSize QLayout::maximumSize() const
Reimplementa: QLayoutItem::maximumSize() const.
Devuelve el tamaño máximo de este diseño. Se trata del mayor tamaño que puede tener la maqueta respetando las especificaciones.
El valor devuelto no incluye el espacio requerido por QWidget::setContentsMargins() o menuBar().
La implementación por defecto permite un redimensionamiento ilimitado.
QWidget *QLayout::menuBar() const
Devuelve la barra de menú establecida para este diseño, o nullptr si no hay barra de menú establecida.
Véase también setMenuBar().
[override virtual] QSize QLayout::minimumSize() const
Reimplementa: QLayoutItem::minimumSize() const.
Devuelve el tamaño mínimo de este diseño. Es el tamaño más pequeño que puede tener la maqueta respetando las especificaciones.
El valor devuelto no incluye el espacio requerido por QWidget::setContentsMargins() o menuBar().
La implementación por defecto permite un redimensionamiento ilimitado.
QWidget *QLayout::parentWidget() const
Devuelve el widget padre de este diseño, o nullptr si este diseño no está instalado en ningún widget.
Si el diseño es un sub-diseño, esta función devuelve el widget padre del diseño padre.
Véase también parent().
void QLayout::removeItem(QLayoutItem *item)
Elimina el elemento de diseño item del diseño. Es responsabilidad de quien llama eliminar el elemento.
Observe que item puede ser una presentación (ya que QLayout hereda de QLayoutItem).
Véase también removeWidget() y addItem().
void QLayout::removeWidget(QWidget *widget)
Elimina el widget widget del diseño. Después de esta llamada, es responsabilidad de quien llama al widget darle una geometría razonable o volver a colocarlo en un diseño u ocultarlo explícitamente si es necesario.
Nota: La propiedad de widget sigue siendo la misma que cuando se añadió.
Véase también removeItem(), QWidget::setGeometry(), y addWidget().
[virtual] QLayoutItem *QLayout::replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively)
Busca el widget from y lo sustituye por el widget to si lo encuentra. Devuelve el elemento de diseño que contiene el widget from en caso de éxito. En caso contrario, devuelve nullptr. Si options contiene Qt::FindChildrenRecursively (por defecto), se buscan sub-disposiciones para hacer el reemplazo. Cualquier otra bandera en options se ignora.
Tenga en cuenta que el elemento devuelto podría no pertenecer a este diseño, sino a un sub-diseño.
El elemento devuelto ya no pertenece a la maquetación y debe eliminarse o insertarse en otra maquetación. El widget from ya no está gestionado por la maquetación y es posible que deba eliminarse u ocultarse. El padre del widget from no se modifica.
Esta función funciona con los diseños Qt integrados, pero puede no funcionar con diseños personalizados.
Véase también indexOf().
bool QLayout::setAlignment(QWidget *w, Qt::Alignment alignment)
Establece la alineación del widget w en alignment y devuelve true si w se encuentra en este diseño (sin incluir los diseños hijo); en caso contrario devuelve false.
bool QLayout::setAlignment(QLayout *l, Qt::Alignment alignment)
Establece la alineación para el diseño l en alignment y devuelve true si l se encuentra en este diseño (sin incluir diseños hijos); en caso contrario devuelve false.
Se trata de una función sobrecargada.
void QLayout::setContentsMargins(const QMargins &margins)
Establece el margins que se utilizará alrededor del diseño.
Por defecto, QLayout utiliza los valores proporcionados por el estilo. En la mayoría de las plataformas, el margen es de 11 píxeles en todas las direcciones.
Nota: Función Setter para la propiedad contentsMargins.
Véase también contentsMargins().
void QLayout::setContentsMargins(int left, int top, int right, int bottom)
Establece los márgenes left, top, right, y bottom a utilizar alrededor del diseño.
Por defecto, QLayout utiliza los valores proporcionados por el estilo. En la mayoría de las plataformas, el margen es de 11 píxeles en todas las direcciones.
Nota: Función Setter para la propiedad contentsMargins.
Ver también getContentsMargins(), QStyle::pixelMetric(), PM_LayoutLeftMargin, PM_LayoutTopMargin, PM_LayoutRightMargin, y PM_LayoutBottomMargin.
void QLayout::setEnabled(bool enable)
Habilita este diseño si enable es verdadero; de lo contrario, lo deshabilita.
Un diseño activado se ajusta dinámicamente a los cambios; un diseño desactivado actúa como si no existiera.
Por defecto, todos los diseños están activados.
Véase también isEnabled().
[override virtual] void QLayout::setGeometry(const QRect &r)
Reimplementa: QLayoutItem::setGeometry(const QRect &r).
Véase también geometry().
void QLayout::setMenuBar(QWidget *widget)
Indica al gestor de geometría que coloque la barra de menú widget en la parte superior de parentWidget(), fuera de QWidget::contentsMargins(). Todos los widgets hijos se colocan por debajo del borde inferior de la barra de menú.
Véase también menuBar().
[since 6.10] void QLayout::setSizeConstraints(QLayout::SizeConstraint horizontal, QLayout::SizeConstraint vertical)
Establece las restricciones de tamaño de horizontal y vertical.
Esta función se introdujo en Qt 6.10.
Véase también sizeConstraint(), horizontalSizeConstraint() y verticalSizeConstraint().
[pure virtual] QLayoutItem *QLayout::takeAt(int index)
Debe implementarse en subclases para eliminar el elemento de diseño en index del diseño, y devolver el elemento. Si no existe tal elemento, la función no debe hacer nada y devolver 0. Los elementos se numeran consecutivamente a partir de 0. Si se elimina un elemento, se renumerarán los demás. Los elementos se numeran consecutivamente a partir de 0. Si se elimina un elemento, se renumerarán los demás.
El siguiente fragmento de código muestra una forma segura de eliminar todos los elementos de una presentación:
QLayoutItem *child; while ((child = layout->takeAt(0)) != nullptr) { ... delete child->widget(); // delete the widget delete child; // delete the layout item }
Véase también itemAt() y count().
[since 6.1] void QLayout::unsetContentsMargins()
Anula los márgenes definidos por el usuario alrededor del diseño. El diseño utilizará los valores por defecto proporcionados por el estilo.
Nota: Función Resetter para la propiedad contentsMargins.
Esta función se introdujo en Qt 6.1.
Véase también setContentsMargins().
void QLayout::update()
Actualiza el diseño de parentWidget().
Por lo general, no debería ser necesario llamarlo, ya que se llama automáticamente en los momentos más apropiados.
Véase también activate() y invalidate().
© 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.