Was ist der Unterschied zwischen QMainWindow, QWidget und QDialog?

122

Was ist der Unterschied zwischen QMainWindow, QWidget und QDialog?

Zibib
quelle

Antworten:

129

A QWidgetist die Basisklasse für alle zeichnbaren Klassen in Qt. Jede QWidgetKlasse auf Basis kann als Fenster angezeigt werden, indem sie angezeigt wird, wenn sie kein übergeordnetes Element hat.

A QDialogbasiert auf QWidget, ist jedoch so konzipiert, dass es als Fenster angezeigt wird. Es wird immer in einem Fenster angezeigt und verfügt über Funktionen, mit denen es mit allgemeinen Schaltflächen in Dialogen (Akzeptieren, Ablehnen usw.) gut funktioniert.

QMainWindowist auf die allgemeinen Bedürfnisse eines Hauptfensters ausgelegt. Es verfügt über vordefinierte Stellen für eine Menüleiste, eine Statusleiste, eine Symbolleiste und andere Widgets. Es gibt keine eingebauten Zulassungen für Tasten wie dies der QDialogFall ist.

Caleb Huitt - cjhuitt
quelle
1
Ich habe nach dieser Frage gesucht, aber das ist nicht wirklich die Antwort, auf die ich gewartet habe. In QtDesigner erhalten Sie mit einem QMainWindow eine Menüleiste und eine Statusleiste. Wenn Sie den Code selbst schreiben und QMainWindow verwenden, haben Sie diese Dinge nicht. Oder Sie sagen, dass Sie so etwas wie window.addToolBar ("Toolbar") tun können; und es wird es an einem vordefinierten Ort ohne andere Kopfschmerzen platzieren?
Lilian A. Moraru
1
@ MoraruLilian: Ich benutze QMainWindow eigentlich nicht, daher kenne ich die Details nicht. Wie ich in meiner Antwort sagte, weiß ich, dass es Plätze für sie gibt, daher ist es möglicherweise so einfach, dies im Code zu tun, wie Sie angeben.
Caleb Huitt - cjhuitt
8
@Caleb_Huitt Es macht was ich sage. Ich wollte nur aufklären, ob Sie das sagen wollen. Auf jeden Fall würde ich empfehlen, immer QWidget anstelle von QMainWindow zu verwenden. Sie können Probleme bekommen, beispielsweise beim Festlegen eines anderen Layouts. Wenn Sie ein neues Layout in QMainWindow festlegen möchten, müssen Sie ein QWidget erstellen und es als zentrales Widget für QMainWin festlegen. In diesem Fall können Sie in QWidgetLayout (QLayout *) festlegen. Sie können zusätzliche Kopfschmerzen vermeiden, indem Sie QWidget verwenden. Sicher, QMainWindow bietet diese einfache Einrichtung der ToolBar und der StatusBar, aber Sie können dies selbst in QWidget tun ...
Lilian A. Moraru
2
Ein Grund, den wir QMainWindowanstelle der Basisklasse verwenden QWidgetQMainWindowQDockWidgetQWidget
möchten,
2
@ mLstudent33 Das klingt nach einer guten Frage für die Dokumentation, und wenn das nicht hilft, hier als Hauptfrage und nicht in den Kommentaren. Ein Beispiel (für Qt5) finden Sie unter doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt - cjhuitt
4

QWidget : ist eine Basisklasse für alle anderen GUI-Elemente im QtWidgets-Modul. Es kann ein Fenster für sich bilden oder Teil eines QLayout oder nur ein Mitglied der Eltern-Kind-Hierarchie sein.

QDialog : wird normalerweise verwendet, um - zu überraschen! - Zeigen Sie einen temporären Dialog an, wenn Benutzereingaben erforderlich sind.

QMainWindow : ist eine Komfortklasse , die als Hauptfenster Ihrer Anwendung verwendet werden kann. Es hat einige nette Funktionen eingebaut: eine Statusleiste, Symbolleisten und eine Menüleiste

Lalit Kumar
quelle