En esta página

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:

QBoxLayout, QFormLayout, QGridLayout, y QStackedLayout

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:

ConstanteValorDescripción
QLayout::SetDefaultConstraint0En 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::SetFixedSize3En 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::SetMinimumSize2En la(s) orientación(es) restringida(s), la extensión mínima del widget se establece en minimumSize().
QLayout::SetMaximumSize4En las orientaciones limitadas, la extensión máxima del widget es maximumSize().
QLayout::SetMinAndMaxSize5En 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::SetNoConstraint1No 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.

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.