¿Cuál es la diferencia entre QMainWindow, QWidget y QDialog?

Respuestas:

130

A QWidgetes la clase base para todas las clases dibujables en Qt. Se QWidgetpuede mostrar cualquier clase basada en una ventana mostrándola cuando no tiene padre.

A QDialogse basa en QWidget, pero está diseñado para mostrarse como una ventana. Siempre aparecerá en una ventana y tiene funciones para que funcione bien con botones comunes en los diálogos (aceptar, rechazar, etc.).

QMainWindowestá diseñado en torno a las necesidades comunes de una ventana principal. Tiene lugares predefinidos para una barra de menú, una barra de estado, una barra de herramientas y otros widgets. No tiene asignaciones integradas para botones como lo QDialoghace.

Caleb Huitt - cjhuitt
fuente
1
Busqué esta pregunta pero esa no es realmente la respuesta que estaba esperando. En QtDesigner, el uso de QMainWindow le brinda una barra de menú y una barra de estado. Cuando escribe el código usted mismo y usa QMainWindow, no tiene estas cosas. O estás diciendo que puedes hacer algo como window.addToolBar ("Toolbar"); y lo colocará en un lugar predefinido sin ningún otro dolor de cabeza?
Lilian A. Moraru
1
@MoraruLilian: En realidad no uso QMainWindow, así que no conozco los detalles. Como dije en mi respuesta, sé que tiene lugares para ellos, por lo que hacerlo en código podría ser tan simple como usted dice.
Caleb Huitt - cjhuitt
8
@Caleb_Huitt Hace lo que digo. Quería aclarar si eso es lo que estás tratando de decir. De todos modos, recomendaría usar siempre QWidget en lugar de QMainWindow. Puede tener problemas, por ejemplo, al configurar otro diseño. Si desea establecer un nuevo diseño en QMainWindow, tendrá que crear un QWidget y configurarlo como un widget central para QMainWin y, en ese momento, en QWidget podría configurarLayout (QLayout *). Si bien, podría evitar dolores de cabeza adicionales simplemente usando QWidget. Claro, QMainWindow ofrece esa configuración sencilla de ToolBar y StatusBar, pero puede hacerlo usted mismo en QWidget ...
Lilian A. Moraru
2
Una de las razones por las que buscamos usar en QMainWindowlugar de solo la clase base QWidgetes que QMainWindowtiene QDockWidgetsoporte, mientras que QWidgetpor sí solo no lo tiene
ComradeJoecool
2
@ mLstudent33 Suena como una buena pregunta para la documentación y, si eso no ayuda, para hacerla aquí como pregunta principal en lugar de en los comentarios. Se puede ver un ejemplo (para Qt5) en doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt - cjhuitt
4

QWidget : es una clase base para todos los demás elementos GUI en el módulo QtWidgets. Puede constituir una ventana por sí misma, ser parte de un QLayout o simplemente un miembro de la jerarquía padre-hijo.

QDialog : generalmente se usa para - ¡sorpresa! - muestra un cuadro de diálogo temporal cuando se requiere la entrada del usuario.

QMainWindow : es una clase de conveniencia que puede usarse como la ventana principal de su aplicación. Tiene algunas características agradables incorporadas: una barra de estado, barras de herramientas y una barra de menú

Lalit kumar
fuente