Respuestas:
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.
QMainWindowlugar de solo la clase base QWidgetes que QMainWindowtiene QDockWidgetsoporte, mientras que QWidgetpor sí solo no lo tiene
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ú