Widgets de ventana y diálogo
Un widget que no está incrustado en un widget padre se denomina ventana. Normalmente, las ventanas tienen un marco y una barra de título, aunque también es posible crear ventanas sin dicha decoración utilizando los indicadores de ventana adecuados. En Qt, QMainWindow y las distintas subclases de QDialog son los tipos de ventana más comunes.
En las aplicaciones, las ventanas proporcionan el espacio de pantalla sobre el que se construye la interfaz de usuario. Las ventanas separan visualmente las aplicaciones entre sí y suelen proporcionar una decoración de ventana que permite redimensionar y posicionar las aplicaciones según las preferencias del usuario. Las ventanas suelen estar integradas en el entorno de escritorio y, en cierta medida, gestionadas por el sistema de gestión de ventanas que éste proporciona. Por ejemplo, las ventanas seleccionadas de una aplicación se representan en la barra de tareas.
Ventanas primarias y secundarias
Cualquier QWidget que no tenga padre se convertirá en una ventana, y en la mayoría de las plataformas aparecerá en la barra de tareas del escritorio. Por lo general, esto sólo es necesario para una ventana de la aplicación, la ventana primaria.
Además, una QWidget que tenga un padre puede convertirse en una ventana estableciendo la bandera Qt::Window. Dependiendo del sistema de gestión de ventanas, estas ventanas secundarias suelen apilarse sobre su respectiva ventana principal y no tienen una entrada propia en la barra de tareas.
La clase QMainWindow establece la bandera Qt::Window en su constructor, ya que está diseñada para ser utilizada como una ventana y proporciona facilidades que no son deseadas para los widgets hijos.
Ventanas principales y diálogos
La ventana principal de la aplicación proporciona el marco para la construcción de la interfaz de usuario principal de la aplicación y se crean subclasificando QMainWindow. QMainWindow tiene su propio diseño al que se puede añadir un menu bar, tool bars, dockable widgets y un status bar. El área central puede ser ocupada por cualquier tipo de QWidget.
Las ventanas de diálogo se utilizan como ventanas secundarias que le presentan opciones y elecciones. Los diálogos se crean subclasificando QDialog y utilizando widgets y diseños para implementar la interfaz de usuario. Además, Qt proporciona una serie de diálogos estándar ya creados que pueden utilizarse para tareas estándar como la selección de archivos o fuentes.
Tanto las ventanas principales como los diálogos pueden crearse con Qt Widgets Designer, la herramienta de diseño visual de Qt. Usar Qt Widgets Designer es mucho más rápido que codificar a mano, y facilita probar diferentes ideas de diseño. ¡Crear diseños visualmente y leer el código generado por uic es una gran manera de aprender Qt!
Geometría de ventanas
QWidget proporciona varias funciones que se ocupan de la geometría de un widget. Algunas de estas funciones operan en el área del cliente puro (es decir, la ventana excluyendo el marco de la ventana), otros incluyen el marco de la ventana. QWidget diferencia de una manera que cubre el uso más común de forma transparente.
- Incluyendo el marco de la ventana: x(), y(), frameGeometry(), pos(), y move().
- Sin el marco de ventana: geometry(), width(), height(), rect() y size().
Tenga en cuenta que esta distinción sólo es importante para los widgets decorados de nivel superior. Para todos los widgets hijos, la geometría del marco es igual a la geometría del cliente del widget.
Este diagrama muestra la mayoría de las funciones en uso:

Peculiaridades de X11
En X11, una ventana no tiene marco hasta que el gestor de ventanas la decora. Esto ocurre de forma asíncrona en algún momento después de llamar a QWidget::show() y el primer evento de pintura que recibe la ventana, o no ocurre en absoluto. Ten en cuenta que X11 es libre de políticas (otros lo llaman flexible). Por lo tanto, no puedes hacer ninguna suposición segura sobre el marco de decoración que recibirá tu ventana. Regla básica: Siempre hay un usuario que usa un gestor de ventanas que rompe tu suposición, y que se quejará ante ti.
Además, un toolkit no puede simplemente colocar ventanas en la pantalla. Todo lo que Qt puede hacer es enviar ciertas pistas al gestor de ventanas. El gestor de ventanas, un proceso separado, puede obedecerlas, ignorarlas o malinterpretarlas. Debido al parcialmente confuso Inter-Client Communication Conventions Manual (ICCCM), la colocación de ventanas se maneja de forma diferente en los gestores de ventanas existentes.
X11 no proporciona una forma estándar o fácil de obtener la geometría del marco una vez que la ventana está decorada. Qt resuelve este problema con una heurística ingeniosa y un código inteligente que funciona en una amplia gama de gestores de ventanas que existen hoy en día. No te sorprendas si encuentras uno en el que QWidget::frameGeometry() devuelve resultados erróneos.
X11 tampoco proporciona una forma de maximizar una ventana. QWidget::showMaximized() tiene que emular esta función. Su resultado depende del resultado de QWidget::frameGeometry() y de la capacidad del gestor de ventanas para realizar una correcta colocación de la ventana, ninguna de las cuales puede garantizarse.
Peculiaridades de Wayland
En Wayland, normalmente no es posible establecer u obtener mediante programación la posición de una ventana de nivel superior desde el lado del cliente. Técnicamente hablando, depende de la interfaz del shell. Para los típicos compositores de escritorio, sin embargo, la interfaz shell por defecto será XDG Shell, que no soporta el posicionamiento manual de ventanas. En tales casos, Qt ignorará las llamadas para establecer la posición de nivel superior de una ventana, y, cuando se consulte, la posición de la ventana siempre será devuelta como QPoint(0, 0).
© 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.