En esta página

QSplitter Class

La clase QSplitter implementa un widget divisor. Más...

Cabecera: #include <QSplitter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Hereda: QFrame

Propiedades

Funciones públicas

QSplitter(QWidget *parent = nullptr)
QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)
virtual ~QSplitter()
void addWidget(QWidget *widget)
bool childrenCollapsible() const
int count() const
void getRange(int index, int *min, int *max) const
QSplitterHandle *handle(int index) const
int handleWidth() const
int indexOf(QWidget *widget) const
void insertWidget(int index, QWidget *widget)
bool isCollapsible(int index) const
bool opaqueResize() const
Qt::Orientation orientation() const
void refresh()
QWidget *replaceWidget(int index, QWidget *widget)
bool restoreState(const QByteArray &state)
QByteArray saveState() const
void setChildrenCollapsible(bool)
void setCollapsible(int index, bool collapse)
void setHandleWidth(int)
void setOpaqueResize(bool opaque = true)
void setOrientation(Qt::Orientation)
void setSizes(const QList<int> &list)
void setStretchFactor(int index, int stretch)
QList<int> sizes() const
QWidget *widget(int index) const

Funciones públicas reimplementadas

virtual QSize minimumSizeHint() const override
virtual QSize sizeHint() const override

Señales

void splitterMoved(int pos, int index)

Funciones protegidas

int closestLegalPosition(int pos, int index)
virtual QSplitterHandle *createHandle()
void moveSplitter(int pos, int index)
void setRubberBand(int pos)

Funciones protegidas reimplementadas

virtual void changeEvent(QEvent *ev) override
virtual void childEvent(QChildEvent *c) override
virtual bool event(QEvent *e) override
virtual void resizeEvent(QResizeEvent *) override

Descripción detallada

Un splitter permite al usuario controlar el tamaño de los widgets hijos arrastrando el límite entre ellos. Un único splitter puede controlar cualquier número de widgets. El uso típico de un QSplitter es crear varios widgets y añadirlos usando insertWidget() o addWidget().

El siguiente ejemplo mostrará un QListView, QTreeView, y QTextEdit uno al lado del otro, con dos manejadores splitter:

QSplitter *splitter = new QSplitter(parent);
QListView *listview = new QListView;
QTreeView *treeview = new QTreeView;
QTextEdit *textedit = new QTextEdit;
splitter->addWidget(listview);
splitter->addWidget(treeview);
splitter->addWidget(textedit);

Si un widget ya está dentro de un QSplitter cuando se llama a insertWidget() o addWidget(), se moverá a la nueva posición. Esto puede usarse para reordenar los widgets en el splitter más tarde. Puedes usar indexOf(), widget(), y count() para acceder a los widgets dentro del divisor.

Un QSplitter por defecto despliega sus hijos horizontalmente (uno al lado del otro); puedes usar setOrientation(Qt::Vertical) para desplegar sus hijos verticalmente.

Por defecto, todos los widgets pueden ser tan grandes o tan pequeños como el usuario desee, entre minimumSizeHint() (o minimumSize()) y maximumSize() de los widgets.

QSplitter redimensiona sus hijos dinámicamente por defecto. Si prefiere que QSplitter redimensione los hijos sólo al final de una operación de redimensionamiento, llame a setOpaqueResize(false).

La distribución inicial del tamaño entre los widgets se determina multiplicando el tamaño inicial por el factor de estiramiento. También puede utilizar setSizes() para establecer los tamaños de todos los widgets. La función sizes() devuelve los tamaños establecidos por el usuario. Alternativamente, puede guardar y restaurar los tamaños de los widgets desde un QByteArray utilizando saveState() y restoreState() respectivamente.

Cuando usted hide() un hijo, su espacio será distribuido entre los otros hijos. Se restablecerá cuando vuelva a show().

Nota: No es posible añadir un QLayout a un QSplitter (ni a través de setLayout() ni haciendo que el QSplitter sea padre del QLayout); utilice addWidget() en su lugar (véase el ejemplo anterior).

Ver también QSplitterHandle, QHBoxLayout, QVBoxLayout, y QTabWidget.

Documentación de propiedades

childrenCollapsible : bool

Esta propiedad indica si los widgets hijos pueden ser redimensionados a tamaño 0 por el usuario.

Por defecto, los hijos son plegables. Es posible activar y desactivar el colapso de los hijos individuales utilizando setCollapsible().

Funciones de acceso:

bool childrenCollapsible() const
void setChildrenCollapsible(bool)

Véase también setCollapsible().

handleWidth : int

Esta propiedad contiene el ancho de los tiradores del divisor

Por defecto, esta propiedad contiene un valor que depende de las preferencias de plataforma y estilo del usuario.

Si establece handleWidth a 1 o 0, el área de agarre real crecerá hasta solaparse unos pocos píxeles de sus respectivos widgets.

Funciones de acceso:

int handleWidth() const
void setHandleWidth(int)

opaqueResize : bool

Devuelve true si los widgets se redimensionan dinámicamente (opacamente) mientras se mueve interactivamente el divisor. En caso contrario devuelve false.

El comportamiento de redimensionamiento por defecto depende del estilo (determinado por la sugerencia de estilo SH_Splitter_OpaqueResize). Sin embargo, puede anularlo llamando a setOpaqueResize()

Funciones de acceso:

bool opaqueResize() const
void setOpaqueResize(bool opaque = true)

Véase también QStyle::StyleHint.

orientation : Qt::Orientation

Esta propiedad contiene la orientación del divisor

Por defecto, la orientación es horizontal (es decir, los widgets están dispuestos uno al lado del otro). Las orientaciones posibles son Qt::Horizontal y Qt::Vertical.

Funciones de acceso:

Qt::Orientation orientation() const
void setOrientation(Qt::Orientation)

Véase también QSplitterHandle::orientation().

Documentación de las funciones miembro

[explicit] QSplitter::QSplitter(QWidget *parent = nullptr)

Construye un divisor horizontal con el argumento parent pasado al constructor QFrame.

Véase también setOrientation().

[explicit] QSplitter::QSplitter(Qt::Orientation orientation, QWidget *parent = nullptr)

Construye un divisor con los datos orientation y parent.

Véase también setOrientation().

[virtual noexcept] QSplitter::~QSplitter()

Destruye el divisor. Se borran todos los hijos.

void QSplitter::addWidget(QWidget *widget)

Añade el widget dado al diseño del divisor después de todos los demás elementos.

Si widget ya está en el divisor, se moverá a la nueva posición.

Nota: El divisor toma posesión del widget.

Véase también insertWidget(), widget(), y indexOf().

[override virtual protected] void QSplitter::changeEvent(QEvent *ev)

Reimplementa: QFrame::changeEvent(QEvent *ev).

[override virtual protected] void QSplitter::childEvent(QChildEvent *c)

Reimplementa: QObject::childEvent(QChildEvent *event).

Indica al divisor que el widget hijo descrito por c ha sido insertado o eliminado.

Este método también se usa para manejar la situación en la que un widget se crea con el splitter como padre pero no se añade explícitamente con insertWidget() o addWidget(). Esto es por compatibilidad y no es la forma recomendada de poner widgets en un splitter en código nuevo. Por favor, utilice insertWidget() o addWidget() en código nuevo.

Véase también addWidget() y insertWidget().

[protected] int QSplitter::closestLegalPosition(int pos, int index)

Devuelve la posición legal más cercana a pos del widget en index.

Para idiomas de derecha a izquierda, como el árabe y el hebreo, la disposición de los divisores horizontales se invierte. Las posiciones se miden entonces desde el borde derecho del widget.

Véase también getRange().

int QSplitter::count() const

Devuelve el número de widgets contenidos en el diseño del divisor.

Véase también widget() y handle().

[virtual protected] QSplitterHandle *QSplitter::createHandle()

Devuelve un nuevo manejador de divisor como widget hijo de este divisor. Esta función puede ser reimplementada en subclases para dar soporte a manejadores personalizados.

Véase también handle() y indexOf().

[override virtual protected] bool QSplitter::event(QEvent *e)

Reimplementa: QFrame::event(QEvent *e).

void QSplitter::getRange(int index, int *min, int *max) const

Devuelve el rango válido del divisor en index en *min y *max si min y max no son 0.

QSplitterHandle *QSplitter::handle(int index) const

Devuelve el manejador situado a la izquierda (o encima) del elemento de la presentación del divisor en la dirección index, o nullptr si no existe dicho elemento. El manejador en el índice 0 siempre está oculto.

En los idiomas de derecha a izquierda, como el árabe y el hebreo, la disposición de los divisores horizontales se invierte. El manejador estará a la derecha del widget en index.

Véase también count(), widget(), indexOf(), createHandle() y setHandleWidth().

int QSplitter::indexOf(QWidget *widget) const

Devuelve el índice en el diseño del divisor del widget especificado , o -1 si no se encuentra widget. Esto también funciona para los manejadores.

Los manejadores se numeran desde 0. Hay tantos manejadores como widgets hijos, pero el manejador en la posición 0 siempre está oculto.

Véase también count() y widget().

void QSplitter::insertWidget(int index, QWidget *widget)

Inserta el widget especificado en la disposición del divisor en el index dado.

Si widget ya está en el divisor, se moverá a la nueva posición.

Si index es un índice no válido, el widget se insertará al final.

Nota: El divisor toma posesión del widget.

Véase también addWidget(), indexOf(), y widget().

bool QSplitter::isCollapsible(int index) const

Devuelve true si el widget en index es plegable, en caso contrario devuelve false.

[override virtual] QSize QSplitter::minimumSizeHint() const

Reimplementa una función de acceso para la propiedad: QWidget::minimumSizeHint.

[protected] void QSplitter::moveSplitter(int pos, int index)

Mueve el borde izquierdo o superior del asa del divisor en index lo más cerca posible de la posición pos, que es la distancia desde el borde izquierdo o superior del widget.

Para idiomas de derecha a izquierda, como el árabe y el hebreo, la disposición de los divisores horizontales se invierte. pos es entonces la distancia desde el borde derecho del widget.

Véase también splitterMoved(), closestLegalPosition() y getRange().

void QSplitter::refresh()

Actualiza el estado del divisor. No debería ser necesario llamar a esta función.

QWidget *QSplitter::replaceWidget(int index, QWidget *widget)

Reemplaza el widget en el diseño del divisor en el index dado por widget.

Devuelve el widget que acaba de ser reemplazado si index es válido y widget no es ya hijo del divisor. En caso contrario, devuelve null y no se realiza ninguna sustitución o adición.

La geometría del widget recién insertado será la misma que la del widget al que sustituye. Sus estados visible y colapsado también se heredan.

Nota: El divisor toma la propiedad de widget y establece el padre del widget reemplazado en null.

Nota: Dado que widget introduce reparented en el divisor, puede que su geometry no se establezca inmediatamente, sino sólo después de que widget reciba los eventos apropiados.

Véase también insertWidget() y indexOf().

[override virtual protected] void QSplitter::resizeEvent(QResizeEvent *)

Reimplementa: QWidget::resizeEvent(QResizeEvent *event).

bool QSplitter::restoreState(const QByteArray &state)

Restaura el diseño del divisor al state especificado. Devuelve true si se restaura el estado; en caso contrario devuelve false.

Normalmente se utiliza junto con QSettings para restaurar el tamaño de una sesión anterior. He aquí un ejemplo:

Restaurar el estado del divisor:

QSettings settings;
splitter->restoreState(settings.value("splitterSizes").toByteArray());

Un fallo al restaurar el estado del divisor puede deberse a datos no válidos o desactualizados en la matriz de bytes suministrada.

Véase también saveState().

QByteArray QSplitter::saveState() const

Guarda el estado del diseño del divisor.

Normalmente se utiliza junto con QSettings para recordar el tamaño para una sesión futura. Se almacena un número de versión como parte de los datos. He aquí un ejemplo:

QSettings settings;
settings.setValue("splitterSizes", splitter->saveState());

Véase también restoreState().

void QSplitter::setCollapsible(int index, bool collapse)

Establece si el widget hijo en index es plegable en collapse.

Por defecto, los widgets hijos son plegables, lo que significa que el usuario puede redimensionarlos hasta el tamaño 0, incluso si tienen un minimumSize() o minimumSizeHint() distinto de cero. Este comportamiento puede cambiarse para cada widget llamando a esta función, o globalmente para todos los widgets del divisor estableciendo la propiedad childrenCollapsible.

Véase también isCollapsible() y childrenCollapsible.

[protected] void QSplitter::setRubberBand(int pos)

Muestra una goma elástica en la posición pos. Si pos es negativo, se retira la goma elástica.

void QSplitter::setSizes(const QList<int> &list)

Establece los tamaños respectivos de los widgets hijos a los valores dados en list.

Si el divisor es horizontal, los valores establecen la anchura de cada widget en píxeles, de izquierda a derecha. Si el divisor es vertical, se establece la altura de cada widget, de arriba a abajo.

Los valores adicionales en list se ignoran. Si list contiene muy pocos valores, el resultado es indefinido, pero el programa seguirá comportándose bien.

El tamaño total del widget divisor no se ve afectado. En su lugar, cualquier espacio adicional/faltante se distribuye entre los widgets según el peso relativo de los tamaños.

Si especifica un tamaño de 0, el widget será invisible. Las políticas de tamaño de los widgets se conservan. Es decir, un valor menor que la sugerencia de tamaño mínimo del widget respectivo será reemplazado por el valor de la sugerencia.

Véase también sizes().

void QSplitter::setStretchFactor(int index, int stretch)

Actualiza la política de tamaño del widget en la posición index para que tenga un factor de estiramiento de stretch.

stretch no es el factor de estiramiento efectivo; el factor de estiramiento efectivo se calcula tomando el tamaño inicial del widget y multiplicándolo por stretch.

Esta función se proporciona por comodidad. Es equivalente a

QWidget *widget = splitter->widget(index);
QSizePolicy policy = widget->sizePolicy();
policy.setHorizontalStretch(stretch);
policy.setVerticalStretch(stretch);
widget->setSizePolicy(policy);

Véase también setSizes() y widget().

[override virtual] QSize QSplitter::sizeHint() const

Reimplementa: QFrame::sizeHint() const.

QList<int> QSplitter::sizes() const

Devuelve una lista de los parámetros de tamaño de todos los widgets de este divisor.

Si la orientación del divisor es horizontal, la lista contiene la anchura de los widgets en píxeles, de izquierda a derecha; si la orientación es vertical, la lista contiene la altura de los widgets en píxeles, de arriba a abajo.

Dando los valores a la función setSizes() de otro divisor se obtendrá un divisor con la misma disposición que éste.

Tenga en cuenta que los widgets invisibles tienen un tamaño de 0.

Véase también setSizes().

[signal] void QSplitter::splitterMoved(int pos, int index)

Esta señal se emite cuando el asa del divisor en un determinado index se ha movido a la posición pos.

Para los idiomas de derecha a izquierda, como el árabe y el hebreo, la disposición de los divisores horizontales se invierte. pos es entonces la distancia desde el borde derecho del widget.

Véase también moveSplitter().

QWidget *QSplitter::widget(int index) const

Devuelve el widget en el index dado en el diseño del divisor, o nullptr si no existe tal widget.

Véase también count(), handle(), indexOf() y insertWidget().

© 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.