Ventana principal de la aplicación
Visión general de las clases de ventana principal
Estas clases proporcionan todo lo necesario para una típica ventana principal de aplicación moderna, como la propia ventana principal, barras de menú y de herramientas, y una barra de estado.
Widget que puede ser anclado dentro de una QMainWindow o flotado como una ventana de nivel superior en el escritorio | |
Ventana principal de la aplicación | |
Área en la que se muestran las ventanas MDI | |
Clase de subventana para QMdiArea | |
Widget de menú para barras de menú, menús contextuales y otros menús emergentes | |
Barra de menús horizontal | |
Asa de cambio de tamaño para cambiar el tamaño de las ventanas de nivel superior | |
Barra horizontal adecuada para presentar información de estado | |
Panel móvil que contiene un conjunto de controles | |
Amplía QAction mediante una interfaz para insertar widgets personalizados en contenedores basados en acciones, como barras de herramientas |
Las clases de la ventana principal
Qt proporciona las siguientes clases para gestionar las ventanas principales y los componentes de interfaz de usuario asociados:
- QMainWindow es la clase central alrededor de la cual se pueden construir las aplicaciones. Junto con las clases QDockWidget y QToolBar, representa la interfaz de usuario de nivel superior de la aplicación.
- QDockWidget proporciona un widget que puede utilizarse para crear paletas de herramientas desmontables o ventanas de ayuda. Los widgets Dock mantienen un registro de sus propias propiedades, y pueden moverse, cerrarse y flotar como ventanas externas.
- QToolBar proporciona un widget de barra de herramientas genérico que puede contener distintos widgets relacionados con acciones, como botones, menús desplegables, cuadros combinados y cuadros giratorios. El énfasis en un modelo de acción unificado en Qt significa que las barras de herramientas cooperan bien con los menús y los atajos de teclado.
Código de ejemplo
Usar QMainWindow es sencillo. Generalmente, subclasificas QMainWindow y configuras menús, barras de herramientas y widgets dock dentro del constructor QMainWindow.
Para añadir una barra de menús a la ventana principal, crea los menús y añádelos a la barra de menús de la ventana principal. Tenga en cuenta que la función QMainWindow::menuBar() creará automáticamente la barra de menús la primera vez que sea llamada. También puede llamar a QMainWindow::setMenuBar() para utilizar una barra de menús personalizada en la ventana principal.
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { ... newAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentNew), tr("&New"), this); newAct->setShortcuts(QKeySequence::New); newAct->setStatusTip(tr("Create a new file")); connect(newAct, &QAction::triggered, this, &MainWindow::newFile); openAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen), tr("&Open..."), this); openAct->setShortcuts(QKeySequence::Open); openAct->setStatusTip(tr("Open an existing file")); connect(openAct, &QAction::triggered, this, &MainWindow::open); ...
Una vez creadas las acciones, puede añadirlas a los componentes de la ventana principal. Para empezar, añádalas a los menús emergentes:
fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct); fileMenu->addAction(openAct); ... fileMenu->addSeparator(); ...
Las clases QToolBar y QMenu utilizan el sistema de acciones de Qt para proporcionar una API consistente. En el código anterior, algunas acciones existentes se añadieron al menú de archivos con la función QMenu::addAction(). QToolBar también proporciona esta función, facilitando la reutilización de acciones en diferentes partes de la ventana principal. Esto evita la duplicación innecesaria de trabajo.
Cree una barra de herramientas como hija de la ventana principal, y añádale las acciones deseadas:
fileToolBar = addToolBar(tr("File")); fileToolBar->addAction(newAct); fileToolBar->addAction(openAct); ... fileToolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea); addToolBar(Qt::TopToolBarArea, fileToolbar);
En este ejemplo, la barra de herramientas se limita a las áreas superior e inferior de la ventana principal, y se coloca inicialmente en el área superior de la barra de herramientas. Podemos ver que las acciones especificadas por newAct y openAct se mostrarán tanto en la barra de herramientas como en el menú de archivos.
QDockWidget se utiliza de forma similar a QToolBar. Se crea un widget de acoplamiento como hijo de la ventana principal, y se añaden widgets como hijos del widget de acoplamiento:
contentsWindow = new QDockWidget(tr("Table of Contents"), this); contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); addDockWidget(Qt::LeftDockWidgetArea, contentsWindow); headingList = new QListWidget(contentsWindow); contentsWindow->setWidget(headingList);
En este ejemplo, el widget de acoplamiento sólo puede colocarse en las áreas de acoplamiento izquierda y derecha, y se coloca inicialmente en el área de acoplamiento izquierda.
La API QMainWindow permite personalizar qué áreas del widget dock ocupan las cuatro esquinas del área del widget dock. Si es necesario, se puede cambiar el valor predeterminado con la función QMainWindow::setCorner():
setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
El siguiente diagrama muestra la configuración producida por el código anterior. Observe que los widgets acoplables izquierdo y derecho ocuparán las esquinas superior e inferior de la ventana principal en esta disposición.

Una vez configurados todos los componentes de la ventana principal, se crea e instala el widget central mediante un código similar al siguiente:
El widget central puede ser cualquier subclase de QWidget.
© 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.