En esta página

QMdiSubWindow Class

La clase QMdiSubWindow proporciona una clase subwindow para QMdiArea. Más...

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

Tipos públicos

enum SubWindowOption { RubberBandResize, RubberBandMove }
flags SubWindowOptions

Propiedades

Funciones públicas

QMdiSubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
virtual ~QMdiSubWindow()
bool isShaded() const
int keyboardPageStep() const
int keyboardSingleStep() const
QMdiArea *mdiArea() const
void setKeyboardPageStep(int step)
void setKeyboardSingleStep(int step)
void setOption(QMdiSubWindow::SubWindowOption option, bool on = true)
void setSystemMenu(QMenu *systemMenu)
void setWidget(QWidget *widget)
QMenu *systemMenu() const
bool testOption(QMdiSubWindow::SubWindowOption option) const
QWidget *widget() const

Funciones públicas reimplementadas

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

Ranuras públicas

void showShaded()
void showSystemMenu()

Señales

void aboutToActivate()
void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)

Funciones protegidas reimplementadas

virtual void changeEvent(QEvent *changeEvent) override
virtual void childEvent(QChildEvent *childEvent) override
virtual void closeEvent(QCloseEvent *closeEvent) override
virtual void contextMenuEvent(QContextMenuEvent *contextMenuEvent) override
virtual bool event(QEvent *event) override
virtual bool eventFilter(QObject *object, QEvent *event) override
virtual void focusInEvent(QFocusEvent *focusInEvent) override
virtual void focusOutEvent(QFocusEvent *focusOutEvent) override
virtual void hideEvent(QHideEvent *hideEvent) override
virtual void keyPressEvent(QKeyEvent *keyEvent) override
virtual void leaveEvent(QEvent *leaveEvent) override
virtual void mouseDoubleClickEvent(QMouseEvent *mouseEvent) override
virtual void mouseMoveEvent(QMouseEvent *mouseEvent) override
virtual void mousePressEvent(QMouseEvent *mouseEvent) override
virtual void mouseReleaseEvent(QMouseEvent *mouseEvent) override
virtual void moveEvent(QMoveEvent *moveEvent) override
virtual void paintEvent(QPaintEvent *paintEvent) override
virtual void resizeEvent(QResizeEvent *resizeEvent) override
virtual void showEvent(QShowEvent *showEvent) override
virtual void timerEvent(QTimerEvent *timerEvent) override

Descripción Detallada

QMdiSubWindow representa una ventana de nivel superior en un QMdiArea, y consiste en una barra de título con decoraciones de ventana, un widget interno, y (dependiendo del estilo actual) un marco de ventana y un control de tamaño. QMdiSubWindow tiene su propio diseño, que consiste en la barra de título y un área central para el widget interno.

Ventana MDI con una barra de título y un widget interno

La forma más común de construir una QMdiSubWindow es llamar a QMdiArea::addSubWindow() con el widget interno como argumento. También puede crear una subventana usted mismo, y establecer un widget interno llamando a setWidget().

Al programar con subventanas se utiliza la misma API que con las ventanas normales de nivel superior (por ejemplo, puede llamar a funciones como show(), hide(), showMaximized() y setWindowTitle()).

Manejo de subventanas

QMdiSubWindow también soporta el comportamiento específico de las subventanas en un área MDI.

Por defecto, cada QMdiSubWindow es visible dentro de la ventana gráfica del área MDI cuando se mueve, pero también es posible especificar un comportamiento transparente de movimiento y redimensionamiento de ventanas, en el que sólo se actualiza el contorno de una subventana durante estas operaciones. Para activar este comportamiento se utiliza la función setOption().

La función isShaded() detecta si la subventana está actualmente sombreada (es decir, la ventana está contraída de modo que sólo es visible la barra de título). Para entrar en modo sombreado, llame a showShaded(). QMdiSubWindow emite la señal windowStateChanged() cada vez que cambia el estado de la ventana (por ejemplo, cuando se minimiza o se restaura). También emite aboutToActivate() antes de activarse.

En modo teclado-interactivo, las ventanas se mueven y redimensionan con el teclado. Puede acceder a este modo a través del menú de sistema de la ventana. Las propiedades keyboardSingleStep y keyboardPageStep controlan la distancia a la que se mueve o redimensiona el widget por cada evento de pulsación de tecla. Cuando se pulsa shift se utiliza el paso de página; en caso contrario, se utiliza el paso simple.

También puedes cambiar la ventana activa con el teclado. Pulsando las teclas control y tabulador al mismo tiempo, se activará la siguiente subventana (utilizando la actual WindowOrder). Pulsando control, mayúsculas y tabulador, se activará la ventana anterior. Esto equivale a llamar a activateNextSubWindow() y activatePreviousSubWindow(). Tenga en cuenta que estos atajos anulan los atajos globales, pero no los atajos de QMdiArea.

Véase también QMdiArea.

Documentación de tipos de miembros

enum QMdiSubWindow::SubWindowOption
flags QMdiSubWindow::SubWindowOptions

Este enum describe opciones que personalizan el comportamiento de QMdiSubWindow.

ConstanteValorDescripción
QMdiSubWindow::RubberBandResize0x4Si activa esta opción, se utiliza un control de banda elástica para representar el contorno de la subventana, y el usuario cambia su tamaño en lugar de hacerlo en la propia subventana. Como resultado, la subventana mantiene su posición y tamaño originales hasta que finaliza la operación de redimensionamiento, momento en el que recibirá un único QResizeEvent. Por defecto, esta opción está desactivada.
QMdiSubWindow::RubberBandMove0x8Si activa esta opción, se utiliza un control de banda elástica para representar el contorno de la subventana, y el usuario lo mueve en lugar de la propia subventana. Como resultado, la subventana permanece en su posición original hasta que finaliza la operación de movimiento, momento en el que se envía un mensaje QMoveEvent a la ventana. Por defecto, esta opción está desactivada.

El tipo SubWindowOptions es un typedef para QFlags<SubWindowOption>. Almacena una combinación OR de valores SubWindowOption.

Documentación de Propiedades

keyboardPageStep : int

establece la distancia a la que un widget debe moverse o redimensionarse cuando se utilizan las teclas de página del teclado.

Cuando se está en modo interactivo con el teclado, se pueden utilizar las flechas y las teclas de página para mover o redimensionar la ventana. Esta propiedad controla las teclas de paginación. La forma más común de entrar en el modo interactivo del teclado es entrar en el menú de la subventana y seleccionar "redimensionar" o "mover".

El valor por defecto del paso de página del teclado es de 20 píxeles.

Funciones de acceso:

int keyboardPageStep() const
void setKeyboardPageStep(int step)

Véase también keyboardSingleStep.

keyboardSingleStep : int

establece la distancia a la que un widget debe moverse o cambiar de tamaño cuando se utilizan las teclas de flecha del teclado.

Cuando se está en modo teclado-interactivo, se pueden utilizar las teclas de flecha y página para mover o redimensionar la ventana. Esta propiedad controla las teclas de flecha. La forma habitual de entrar en modo interactivo con el teclado es entrar en el menú de subventana y seleccionar "redimensionar" o "mover".

El valor por defecto del paso único del teclado es de 5 píxeles.

Funciones de acceso:

int keyboardSingleStep() const
void setKeyboardSingleStep(int step)

Véase también keyboardPageStep.

Documentación de funciones miembro

QMdiSubWindow::QMdiSubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

Construye un nuevo widget QMdiSubWindow. Los argumentos parent y flags se pasan al constructor QWidget's.

En lugar de utilizar addSubWindow(), también es posible utilizar setParent() cuando se añade la subventana a QMdiArea.

Tenga en cuenta que sólo QMdiSubWindows se pueden establecer como hijos de QMdiArea; no se puede, por ejemplo, escribir:

//bad code
QMdiArea mdiArea;
QTextEdit editor(&mdiArea); // invalid child widget

Véase también QMdiArea::addSubWindow().

[virtual noexcept] QMdiSubWindow::~QMdiSubWindow()

Destruye la subventana.

Véase también QMdiArea::removeSubWindow().

[signal] void QMdiSubWindow::aboutToActivate()

QMdiSubWindow emite esta señal inmediatamente antes de activarse. Una vez activada la subventana, el QMdiArea que gestiona la subventana también emitirá la señal subWindowActivated().

Véase también QMdiArea::subWindowActivated().

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

Reimplementa: QWidget::changeEvent(QEvent *event).

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

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

[override virtual protected] void QMdiSubWindow::closeEvent(QCloseEvent *closeEvent)

Reimplementa: QWidget::closeEvent(QCloseEvent *event).

[override virtual protected] void QMdiSubWindow::contextMenuEvent(QContextMenuEvent *contextMenuEvent)

Reimplementa: QWidget::contextMenuEvent(QContextMenuEvent *event).

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

Reimplementa: QWidget::event(QEvent *event).

[override virtual protected] bool QMdiSubWindow::eventFilter(QObject *object, QEvent *event)

Reimplementa: QObject::eventFilter(QObject *watched, QEvent *event).

[override virtual protected] void QMdiSubWindow::focusInEvent(QFocusEvent *focusInEvent)

Reimplementa: QWidget::focusInEvent(QFocusEvent *event).

[override virtual protected] void QMdiSubWindow::focusOutEvent(QFocusEvent *focusOutEvent)

Reimplementa: QWidget::focusOutEvent(QFocusEvent *event).

[override virtual protected] void QMdiSubWindow::hideEvent(QHideEvent *hideEvent)

Reimplementa: QWidget::hideEvent(QHideEvent *event).

bool QMdiSubWindow::isShaded() const

Devuelve true si esta ventana está sombreada; en caso contrario devuelve false.

Una ventana está sombreada si está contraída de modo que sólo es visible la barra de título.

[override virtual protected] void QMdiSubWindow::keyPressEvent(QKeyEvent *keyEvent)

Reimplementa: QWidget::keyPressEvent(QKeyEvent *event).

[override virtual protected] void QMdiSubWindow::leaveEvent(QEvent *leaveEvent)

Reimplementa: QWidget::leaveEvent(QEvent *event).

QMdiArea *QMdiSubWindow::mdiArea() const

Devuelve el área que contiene esta subventana, o nullptr si no hay ninguna.

Véase también QMdiArea::addSubWindow().

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

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

[override virtual protected] void QMdiSubWindow::mouseDoubleClickEvent(QMouseEvent *mouseEvent)

Reimplementa: QWidget::mouseDoubleClickEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::mouseMoveEvent(QMouseEvent *mouseEvent)

Reimplementa: QWidget::mouseMoveEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::mousePressEvent(QMouseEvent *mouseEvent)

Reimplementa: QWidget::mousePressEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::mouseReleaseEvent(QMouseEvent *mouseEvent)

Reimplementa: QWidget::mouseReleaseEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::moveEvent(QMoveEvent *moveEvent)

Reimplementa: QWidget::moveEvent(QMoveEvent *event).

[override virtual protected] void QMdiSubWindow::paintEvent(QPaintEvent *paintEvent)

Reimplementa: QWidget::paintEvent(QPaintEvent *event).

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

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

Advertencia: Al maximizar o restaurar una subventana, la llamada resultante a esta función puede tener un QResizeEvent::oldSize() inválido.

void QMdiSubWindow::setOption(QMdiSubWindow::SubWindowOption option, bool on = true)

Si on es verdadero, option se activa en la subventana; en caso contrario, se desactiva. Consulte SubWindowOption para conocer el efecto de cada opción.

Véase también SubWindowOption y testOption().

void QMdiSubWindow::setSystemMenu(QMenu *systemMenu)

Establece systemMenu como el menú de sistema actual para esta subventana.

Por defecto, cada QMdiSubWindow tiene un menú de sistema estándar.

Las QActions para el menú del sistema creado por QMdiSubWindow se actualizarán automáticamente dependiendo del estado actual de la ventana; por ejemplo, la acción minimizar se desactivará después de minimizar la ventana.

Las QActions añadidas por el usuario no son actualizadas por QMdiSubWindow.

QMdiSubWindow toma posesión de systemMenu; no es necesario borrarlo. Cualquier menú existente será borrado.

Véase también systemMenu() y showSystemMenu().

void QMdiSubWindow::setWidget(QWidget *widget)

Establece widget como widget interno de esta subventana. El widget interno se muestra en el centro de la subventana, debajo de la barra de título.

QMdiSubWindow toma posesión temporal de widget; no es necesario borrarlo. Cualquier widget interno existente será eliminado y reasignado a la ventana raíz.

Véase también widget().

[override virtual protected] void QMdiSubWindow::showEvent(QShowEvent *showEvent)

Reimplementa: QWidget::showEvent(QShowEvent *event).

[slot] void QMdiSubWindow::showShaded()

La llamada a esta función hace que la subventana entre en modo sombreado. Cuando la subventana está sombreada, sólo es visible la barra de título.

Aunque el sombreado no es compatible con todos los estilos, esta función mostrará la subventana como sombreada, independientemente de que exista o no compatibilidad con el sombreado. Sin embargo, cuando se utiliza con estilos sin soporte para sombreado, el usuario no podrá volver del modo sombreado a través de la interfaz de usuario (por ejemplo, a través de un botón de sombreado en la barra de título).

Véase también isShaded().

[slot] void QMdiSubWindow::showSystemMenu()

Muestra el menú del sistema debajo del icono del menú del sistema en la barra de título.

Véase también setSystemMenu() y systemMenu().

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

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

QMenu *QMdiSubWindow::systemMenu() const

Devuelve un puntero al menú del sistema actual, o cero si no se ha establecido ningún menú del sistema. QMdiSubWindow proporciona un menú del sistema por defecto, pero también se puede establecer el menú con setSystemMenu().

Véase también setSystemMenu() y showSystemMenu().

bool QMdiSubWindow::testOption(QMdiSubWindow::SubWindowOption option) const

Devuelve true si option está habilitado; en caso contrario devuelve false.

Véase también SubWindowOption y setOption().

[override virtual protected] void QMdiSubWindow::timerEvent(QTimerEvent *timerEvent)

Reimplementa: QObject::timerEvent(QTimerEvent *event).

QWidget *QMdiSubWindow::widget() const

Devuelve el widget interno actual.

Véase también setWidget().

[signal] void QMdiSubWindow::windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)

QMdiSubWindow emite esta señal después de que cambie el estado de la ventana. oldState es el estado de la ventana antes de que cambiara, y newState es el nuevo estado actual.

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