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
- childrenCollapsible : bool
- handleWidth : int
- opaqueResize : bool
- orientation : Qt::Orientation
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().
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.