Risposte:
A QWidgetè la classe base per tutte le classi disegnabili in Qt. Qualsiasi QWidgetclasse basata può essere mostrata come una finestra mostrandola quando non ha un genitore.
A QDialogè basato su QWidget, ma progettato per essere mostrato come una finestra. Apparirà sempre in una finestra e ha funzioni per farlo funzionare bene con i pulsanti comuni nelle finestre di dialogo (accetta, rifiuta, ecc.).
QMainWindowè progettato intorno alle esigenze comuni di una finestra principale. Ha posizioni predefinite per una barra dei menu, una barra di stato, una barra degli strumenti e altri widget. Non ha alcuna tolleranza incorporata per pulsanti come QDialogfa.
QMainWindowposto della sola classe base QWidgetè che QMainWindowha il QDockWidgetsupporto mentre QWidgetda solo non lo fa
QWidget : è una classe base per tutti gli altri elementi della GUI nel modulo QtWidgets. Può costituire una finestra a sé stante, o essere parte di un QLayout, o semplicemente un membro della gerarchia padre-figlio.
QDialog : di solito è usato per - sorprendere! - visualizzare una finestra di dialogo temporanea quando è richiesto l'input dell'utente.
QMainWindow : è una classe di convenienza che può essere utilizzata come finestra principale dell'applicazione. Ha alcune caratteristiche interessanti integrate: una barra di stato, barre degli strumenti e una barra dei menu