Sur cette page

Widgets de fenêtre et de dialogue

Un widget qui n'est pas intégré dans un widget parent est appelé une fenêtre. En général, les fenêtres ont un cadre et une barre de titre, bien qu'il soit également possible de créer des fenêtres sans ces décorations en utilisant des drapeaux de fenêtre appropriés. Dans Qt XML, QMainWindow et les diverses sous-classes de QDialog sont les types de fenêtres les plus courants.

Dans les applications, les fenêtres fournissent l'espace d'écran sur lequel l'interface utilisateur est construite. Les fenêtres séparent visuellement les applications les unes des autres et fournissent généralement une décoration de fenêtre qui vous permet de redimensionner et de positionner les applications selon vos préférences. Les fenêtres sont généralement intégrées dans l'environnement de bureau et, dans une certaine mesure, gérées par le système de gestion des fenêtres fourni par l'environnement de bureau. Par exemple, les fenêtres sélectionnées d'une application sont représentées dans la barre des tâches.

Fenêtres primaires et secondaires

Tout QWidget qui n'a pas de parent deviendra une fenêtre et, sur la plupart des plates-formes, sera répertorié dans la barre des tâches du bureau. En général, cela ne concerne qu'une seule fenêtre de l'application, la fenêtre principale.

En outre, une fenêtre QWidget qui a un parent peut devenir une fenêtre en activant le drapeau Qt::Window. Selon le système de gestion des fenêtres, ces fenêtres secondaires sont généralement empilées au-dessus de leur fenêtre parentale respective et n'ont pas leur propre entrée dans la barre des tâches.

La classe QMainWindow active l'indicateur Qt::Window dans son constructeur, car elle est conçue pour être utilisée comme une fenêtre et offre des fonctions qui ne sont pas souhaitées pour les widgets enfants.

Fenêtres et boîtes de dialogue principales

La fenêtre principale de l'application fournit le cadre de construction de l'interface utilisateur principale de l'application et est créée en sous-classant QMainWindow. QMainWindow a sa propre disposition à laquelle vous pouvez ajouter menu bar, tool bars, dockable widgets et status bar. La zone centrale peut être occupée par n'importe quel type de QWidget.

Lesfenêtres de dialogue sont utilisées comme fenêtres secondaires qui vous présentent des options et des choix. Les dialogues sont créés en sous-classant QDialog et en utilisant des widgets et des dispositions pour mettre en œuvre l'interface utilisateur. En outre, Qt fournit un certain nombre de boîtes de dialogue standard prêtes à l'emploi qui peuvent être utilisées pour des tâches standard telles que la sélection de fichiers ou de polices.

Les fenêtres principales et les boîtes de dialogue peuvent être créées à l'aide de Qt Widgets Designer, l'outil de conception visuelle de Qt. L'utilisation de Qt Widgets Designer est beaucoup plus rapide que le codage manuel et permet de tester facilement différentes idées de conception. Créer des designs visuellement et lire le code généré par uic est un excellent moyen d'apprendre Qt !

Géométrie des fenêtres

QWidget fournit plusieurs fonctions qui traitent de la géométrie d'un widget. Certaines de ces fonctions opèrent sur la zone client pure (c'est-à-dire la fenêtre sans le cadre de la fenêtre), d'autres incluent le cadre de la fenêtre. QWidget fait la différence d'une manière qui couvre l'utilisation la plus courante de manière transparente.

Notez que cette distinction n'a d'importance que pour les widgets décorés de niveau supérieur. Pour tous les widgets enfants, la géométrie du cadre est égale à la géométrie du client du widget.

Ce diagramme montre la plupart des fonctions utilisées :

Géométrie de la fenêtre avec dimensions et positions étiquetées

Particularités de X11

Sous X11, une fenêtre n'a pas de cadre jusqu'à ce que le gestionnaire de fenêtres la décore. Cela se produit de manière asynchrone à un moment donné après l'appel à QWidget::show() et le premier événement de peinture que la fenêtre reçoit, ou cela ne se produit pas du tout. Gardez à l'esprit que X11 est sans politique (d'autres l'appellent flexible). Vous ne pouvez donc pas faire de suppositions sûres quant au cadre de décoration que votre fenêtre recevra. Règle de base : Il y a toujours un utilisateur qui utilise un gestionnaire de fenêtres qui ne respecte pas votre hypothèse, et qui se plaindra à vous.

De plus, une boîte à outils ne peut pas simplement placer des fenêtres sur l'écran. Tout ce que Qt peut faire, c'est envoyer certaines indications au gestionnaire de fenêtres. Le gestionnaire de fenêtres, un processus distinct, peut soit obéir, soit ignorer, soit mal comprendre ces indications. En raison du manque de clarté du manuel ICCCM (Inter-Client Communication Conventions Manual), le placement des fenêtres est traité différemment dans les gestionnaires de fenêtres existants.

X11 ne fournit aucun moyen standard ou facile d'obtenir la géométrie du cadre une fois que la fenêtre est décorée. Qt résout ce problème à l'aide d'une heuristique astucieuse et d'un code astucieux qui fonctionne avec une large gamme de gestionnaires de fenêtres qui existent aujourd'hui. Ne soyez pas surpris si vous en trouvez un où QWidget::frameGeometry() renvoie des résultats erronés.

X11 ne fournit pas non plus de moyen de maximiser une fenêtre. QWidget::showMaximized() doit émuler cette fonction. Son résultat dépend du résultat de QWidget::frameGeometry() et de la capacité du gestionnaire de fenêtres à placer correctement les fenêtres, ce qui n'est pas garanti.

Particularités de Wayland

Sur Wayland, la définition ou l'obtention par programme de la position d'une fenêtre de premier niveau à partir du côté client n'est généralement pas prise en charge. Techniquement parlant, cela dépend de l'interface du shell. Pour les compositeurs de bureau typiques, cependant, l'interface shell par défaut sera XDG Shell, qui ne prend pas en charge le positionnement manuel des fenêtres. Dans ce cas, Qt Positioning ignorera les appels pour définir la position de niveau supérieur d'une fenêtre, et, lorsqu'elle est interrogée, la position de la fenêtre sera toujours renvoyée sous la forme QPoint(0, 0).

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.