Qual é a diferença entre QMainWindow, QWidget e QDialog?

123

Qual é a diferença entre QMainWindow, QWidget e QDialog?

zibib
fonte

Respostas:

130

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.

Caleb Huitt - cjhuitt
fonte
1
Procurei essa pergunta, mas essa não é realmente a resposta que eu esperava. No QtDesigner, o uso de um QMainWindow oferece uma barra de menu e uma barra de status. Quando você escreve o código e usa o QMainWindow, não tem essas coisas. Ou você está dizendo que pode fazer algo como window.addToolBar ("Toolbar"); e irá colocá-lo em um local pré-definido sem qualquer outra dor de cabeça?
Lilian A. Moraru
1
@MoraruLilian: Na verdade, não uso o QMainWindow, então não sei os detalhes. Como eu disse em minha resposta, sei que há lugares para eles, então fazer isso em código pode ser tão simples quanto você afirma.
Caleb Huitt - cjhuitt
8
@Caleb_Huitt Faz o que estou dizendo. Eu queria apenas esclarecer se é isso que você está tentando dizer. De qualquer forma, eu recomendaria sempre usar QWidget em vez de QMainWindow. Você pode ter problemas, por exemplo, com a configuração de outro Layout. Se você quiser definir um novo layout em QMainWindow, você terá que criar um QWidget e configurá-lo como um widget central para QMainWin e apenas então em QWidget você pode setLayout (QLayout *). Embora você possa evitar dores de cabeça adicionais apenas usando QWidget. Claro, o QMainWindow oferece essa configuração fácil do ToolBar e do StatusBar, mas você pode fazer isso sozinho no QWidget ...
Lilian A. Moraru
2
Um motivo pelo qual estamos procurando usar em QMainWindowvez de apenas a classe base QWidgeté que QMainWindowtem QDockWidgetsuporte, enquanto QWidgetsozinho não
ComradeJoecool
2
@ mLstudent33 Parece uma boa pergunta para documentação e, se não ajudar, por perguntar aqui como uma pergunta principal, e não nos comentários. Um exemplo (para Qt5) pode ser visto em doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt - cjhuitt
4

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

Lalit Kumar
fonte