Ответы:
A QWidget- это базовый класс для всех доступных классов в Qt. Любой QWidgetкласс на основе может быть показан как окно, показывая его, когда у него нет родителя.
A QDialogоснован на QWidget, но предназначен для отображения в виде окна. Он всегда будет отображаться в окне и имеет функции, позволяющие ему хорошо работать с общими кнопками в диалогах (принять, отклонить и т. Д.).
QMainWindowспроектирован с учетом общих потребностей главного окна. В нем есть предопределенные места для строки меню, строки состояния, панели инструментов и других виджетов. У него нет встроенных припусков для кнопок, как у QDialogнего.
QMainWindowвместо базового класса, QWidgetзаключается в том, что он QMainWindowимеет QDockWidgetподдержку, тогда как сам по QWidgetсебе ее нет
QWidget : это базовый класс для всех других элементов графического интерфейса в модуле QtWidgets. Он может составлять окно само по себе, быть частью QLayout или просто членом родительско-дочерней иерархии.
QDialog : обычно используется - сюрприз! - отображать временное диалоговое окно, когда требуется ввод данных пользователем.
QMainWindow : это удобный класс, который можно использовать в качестве главного окна вашего приложения. В него встроены несколько приятных функций: строка состояния, панели инструментов и строка меню.