Qual è la differenza tra QMainWindow, QWidget e QDialog?


Risposte:


130

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.


1
Ho cercato questa domanda ma non è proprio la risposta che stavo aspettando. In QtDesigner l'utilizzo di QMainWindow fornisce una barra dei menu e una barra di stato. Quando scrivi tu stesso il codice e usi QMainWindow non hai queste cose. O stai dicendo che puoi fare qualcosa come window.addToolBar ("Toolbar"); e lo metterà in un luogo predefinito senza altri mal di testa?
Lilian A. Moraru

1
@ MoraruLilian: In realtà non uso QMainWindow, quindi non conosco i dettagli. Come ho detto nella mia risposta, so che ha posti per loro, quindi farlo in codice potrebbe essere semplice come dici tu.
Caleb Huitt - cjhuitt,

8
@Caleb_Huitt Fa quello che dico. Volevo solo chiarire se è quello che stai cercando di dire. Ad ogni modo, consiglierei di usare sempre QWidget invece di QMainWindow. Puoi avere problemi, ad esempio con l'impostazione di un altro layout. Se vuoi impostare un nuovo layout in QMainWindow dovresti creare un QWidget e impostarlo come widget centrale per QMainWin e solo allora in QWidget potresti impostareLayout (QLayout *). Anche se potresti evitare ulteriori mal di testa semplicemente usando QWidget. Certo, QMainWindow offre quella facile configurazione di ToolBar e StatusBar ma puoi farlo tu stesso in QWidget ...
Lilian A. Moraru

2
Uno dei motivi che stiamo cercando di utilizzare al QMainWindowposto della sola classe base QWidgetè che QMainWindowha il QDockWidgetsupporto mentre QWidgetda solo non lo fa
ComradeJoecool

2
@ mLstudent33 Sembra una buona domanda per la documentazione e, se ciò non aiuta, da porre qui come domanda principale piuttosto che nei commenti. Un esempio (per Qt5) può essere visto su doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt - cjhuitt

4

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.