Widgets de fenêtres et de boîtes de dialogue
Un widget qui n’est pas intégré dans un widget parent est appelé « fenêtre ». En général, les fenêtres possèdent un cadre et une barre de titre, bien qu’il soit également possible de créer des fenêtres sans ces éléments décoratifs à l’aide d’indicateurs de fenêtre appropriés. Dans Qt, les classes ` QMainWindow ` et les différentes sous-classes de ` QDialog ` constituent les types de fenêtres les plus courants.
Dans les applications, les fenêtres fournissent l'espace à l'écran sur lequel s'appuie l'interface utilisateur. Elles séparent visuellement les applications les unes des autres et disposent généralement d'une décoration de fenêtre qui permet de redimensionner et de positionner les applications selon vos préférences. Les fenêtres sont généralement intégrées à l’environnement de bureau et, dans une certaine mesure, gérées par le système de gestion des fenêtres fourni par cet environnement. Par exemple, les fenêtres sélectionnées d’une application sont représentées dans la barre des tâches.
Fenêtres principales et secondaires
Toute « QWidget » qui n'a pas de parent devient une fenêtre et, sur la plupart des plateformes, apparaît dans la barre des tâches du bureau. En général, cela n'est souhaité que pour une seule fenêtre de l'application : la fenêtre principale.
De plus, une QWidget qui possède un parent peut devenir une fenêtre en activant l’indicateur « Qt::Window ». Selon le système de gestion des fenêtres, ces fenêtres secondaires sont généralement superposées à leur fenêtre parente respective et ne disposent pas de 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 fournit des fonctionnalités qui ne sont pas souhaitées pour les widgets enfants.
Fenêtres principales et boîtes de dialogue
La fenêtre principale de l’application fournit le cadre nécessaire à la création de l’interface utilisateur principale de l’application ; elle est créée en sous-classant ` QMainWindow`. ` QMainWindow ` dispose de sa propre mise en page à laquelle vous pouvez ajouter un ` menu bar`, un ` tool bars`, un ` dockable widgets ` et un ` status bar`. La zone centrale peut être occupée par n’importe quel type de ` QWidget`.
Les fenêtres de dialogue sont utilisées comme fenêtres secondaires qui vous présentent des options et des choix. Les boîtes de dialogue sont créées en sous-classant ` QDialog ` et en utilisant des widgets et des dispositions pour implémenter l’interface utilisateur. De plus, Qt fournit un certain nombre de boîtes de dialogue standard prêtes à l’emploi qui peuvent être utilisées pour des tâches courantes telles que la sélection de fichiers ou de polices.
Les fenêtres principales comme les boîtes de dialogue peuvent être créées à l’aide d’ Qt Widgets Designer, l’outil de conception visuelle de Qt. L’utilisation d’ Qt Widgets Designer est bien plus rapide que l’écriture manuelle du code et facilite le test de 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 permettant de gérer la géométrie d’un widget. Certaines de ces fonctions agissent uniquement sur la zone client (c’est-à-dire la fenêtre sans le cadre), tandis que d’autres incluent le cadre de la fenêtre. L’ QWidget établit une distinction qui couvre de manière transparente les utilisations les plus courantes.
- En incluant le cadre de la fenêtre : x(), y(), frameGeometry(), pos() et move().
- Sans le cadre de la fenêtre : geometry(), width(), height(), rect() et size().
Notez que cette distinction n’a d’importance que pour les widgets de niveau supérieur décorés. Pour tous les widgets enfants, la géométrie du cadre est égale à la géométrie client du widget.
Ce schéma présente la plupart des fonctions utilisées :
Particularités de X11
Sous X11, une fenêtre ne dispose pas de cadre tant que le gestionnaire de fenêtres ne l’a pas décorée. Cela se produit de manière asynchrone à un moment donné après l’appel de ` QWidget::show()` et le premier événement de dessin reçu par la fenêtre, ou bien cela ne se produit pas du tout. Gardez à l’esprit que X11 n’impose aucune règle (certains diront qu’il est flexible). Vous ne pouvez donc faire aucune supposition sûre concernant le 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 contredit votre hypothèse, et qui se plaindra auprès de vous.
De plus, une boîte à outils ne peut pas simplement placer des fenêtres à l’écran. Tout ce que Qt peut faire, c’est envoyer certaines indications au gestionnaire de fenêtres. Le gestionnaire de fenêtres, qui est un processus distinct, peut soit les respecter, soit les ignorer, soit les mal interpréter. En raison du manuel ICCCM (Inter-Client Communication Conventions Manual) partiellement ambigu, le placement des fenêtres est géré différemment selon les gestionnaires de fenêtres existants.
X11 ne fournit aucun moyen standard ou simple d’obtenir la géométrie du cadre une fois la fenêtre décorée. Qt résout ce problème grâce à des heuristiques astucieuses et à un code ingénieux qui fonctionne sur un large éventail de gestionnaires de fenêtres existants aujourd’hui. Ne soyez toutefois pas surpris si vous en trouvez un où la fonction ` QWidget::frameGeometry()` renvoie des résultats erronés.
X11 ne fournit pas non plus de moyen d’agrandir une fenêtre. La fonction ` QWidget::showMaximized()` doit émuler cette fonctionnalité. Son résultat dépend du résultat de ` QWidget::frameGeometry()` et de la capacité du gestionnaire de fenêtres à effectuer un placement correct des fenêtres, deux éléments qui ne peuvent être garantis.
Particularités de Wayland
Sous Wayland, la définition ou l’obtention par programmation de la position d’une fenêtre de niveau supérieur depuis le 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 classiques, 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 ignorera les appels visant à définir la position de niveau supérieur d’une fenêtre et, en cas d’interrogation, 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.