Respostas:
A QWidgeté a classe base para todas as classes drawable no Qt. Qualquer QWidgetclasse com base pode ser mostrada como uma janela, mostrando-a quando ela não tem pai.
A QDialogé baseado em QWidget, mas projetado para ser mostrado como uma janela. Ele sempre aparecerá em uma janela e tem funções que o fazem funcionar bem com botões comuns em caixas de diálogo (aceitar, rejeitar, etc.).
QMainWindowfoi projetado em torno das necessidades comuns de uma janela principal. Possui locais predefinidos para uma barra de menu, uma barra de status, uma barra de ferramentas e outros widgets. Ele não tem nenhuma permissão embutida para botões como QDialogfaz.
QMainWindowvez de apenas a classe base QWidgeté que QMainWindowtem QDockWidgetsuporte, enquanto QWidgetsozinho não
QWidget : é uma classe base para todos os outros elementos da GUI no módulo QtWidgets. Ele pode constituir uma janela por si só, ou ser parte de um QLayout, ou apenas um membro da hierarquia pai-filho.
QDialog : normalmente é usado para - surpreender! - exibe uma caixa de diálogo temporária quando a entrada do usuário é necessária.
QMainWindow : é uma classe de conveniência que pode ser usada como janela principal de seu aplicativo. Possui alguns recursos interessantes integrados: uma barra de status, barras de ferramentas e uma barra de menu