Quelle est la différence entre QMainWindow, QWidget et QDialog?

123

Quelle est la différence entre QMainWindow, QWidget et QDialog?

zibib
la source

Réponses:

130

A QWidgetest la classe de base pour toutes les classes dessinables dans Qt. Toute QWidgetclasse basée sur une base peut être affichée comme une fenêtre en l'affichant lorsqu'elle n'a pas de parent.

A QDialogest basé sur QWidget, mais conçu pour être affiché comme une fenêtre. Il apparaîtra toujours dans une fenêtre, et a des fonctions pour le faire fonctionner correctement avec les boutons communs sur les boîtes de dialogue (accepter, rejeter, etc.).

QMainWindowest conçu autour des besoins communs d'une fenêtre principale. Il a des emplacements prédéfinis pour une barre de menus, une barre d'état, une barre d'outils et d'autres widgets. Il n'a aucune allocation intégrée pour les boutons comme le QDialogfait.

Caleb Huitt - Cjhuitt
la source
1
J'ai cherché cette question mais ce n'est pas vraiment la réponse que j'attendais. Dans QtDesigner, l'utilisation d'un QMainWindow vous donne une barre de menus et une barre d'état. Lorsque vous écrivez le code vous-même et que vous utilisez QMainWindow, vous n'avez pas ces choses. Ou votre disant que vous pouvez faire quelque chose comme window.addToolBar ("Toolbar"); et il le placera à un endroit prédéfini sans autre mal de tête?
Lilian A. Moraru
1
@MoraruLilian: Je n'utilise pas réellement QMainWindow, donc je ne connais pas les détails. Comme je l'ai dit dans ma réponse, je sais qu'il y a des endroits pour eux, donc le faire dans le code pourrait être aussi simple que vous le dites.
Caleb Huitt - cjhuitt
8
@Caleb_Huitt Il fait ce que je dis. Je voulais juste clarifier si c'est ce que vous essayez de dire. Quoi qu'il en soit, je recommanderais toujours d'utiliser QWidget au lieu de QMainWindow. Vous pouvez avoir des problèmes, par exemple en définissant une autre mise en page. Si vous voulez définir une nouvelle mise en page dans QMainWindow, vous devez créer un QWidget et le définir comme widget central pour QMainWin et juste après dans QWidget, vous pouvez définirLayout (QLayout *). Bien que vous puissiez éviter des maux de tête supplémentaires simplement en utilisant QWidget. Bien sûr, QMainWindow offre cette configuration facile de la barre d'outils et de la barre d'état, mais vous pouvez le faire vous-même dans QWidget ...
Lilian A. Moraru
2
L'une des raisons pour lesquelles nous cherchons à utiliser QMainWindowau lieu de la classe de base uniquement QWidgetest qu'elle QMainWindowa un QDockWidgetsupport alors que la QWidgetseule ne le fait pas
ComradeJoecool
2
@ mLstudent33 Cela semble être une bonne question pour la documentation, et si cela n'aide pas, pour la poser ici comme question principale plutôt que dans les commentaires. Un exemple (pour Qt5) peut être vu sur doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt - cjhuitt
4

QWidget : est une classe de base pour tous les autres éléments de l'interface graphique du module QtWidgets. Il peut constituer une fenêtre en soi, ou faire partie d'un QLayout, ou simplement un membre de la hiérarchie parent-enfant.

QDialog : est généralement utilisé pour - surprendre! - afficher une boîte de dialogue temporaire lorsqu'une entrée utilisateur est requise.

QMainWindow : est une classe de commodité qui peut être utilisée comme fenêtre principale de votre application. Il a quelques fonctionnalités intéressantes intégrées: une barre d'état, des barres d'outils et une barre de menus

Lalit Kumar
la source