IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Viadeo Twitter Facebook Share on Google+   
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

Fenêtre et boîtes de dialogue

Un widget qui n'est pas inclus dans un widget parent est une fenêtre. D'habitude, les fenêtres ont un cadre et une barre de titre (bien qu'il est possible de créer une fenêtre sans ces décorations avec les drapeaux appropriés). Dans Qt, QMainWindow et les différentes classes filles de QDialog sont les types de fenêtres les plus communs.

Dans les applications, les fenêtres fournissent un espace de l'écran dans lequel l'interface utilisateur est créée. Les fenêtres séparent les applications les unes des autres visuellement et fournissent souvent des options pour que l'utilisateur les redimensionne et les déplace selon ses préférences. Les fenêtres sont typiquement intégrées dans l'environnement de bureau et contrôlées par le système de gestion des fenêtres que l'environnement fournit. Par exemple, les fenêtres sélectionnées d'une application sont représentées dans la barre de tâches.

Fenêtres primaires et secondaires

N'importe quel QWidget qui n'a pas de parent devient une fenêtre et sera listée, dans la plupart des système d'exploitation, dans la barre de tâches du bureau. Ce qui est généralement voulu uniquement pour une fenêtre, la fenêtre principale, primary window.

De plus, un QWidget qui a un parent peut devenir une fenêtre avec le drapeau Qt::WA_Window. Selon le système de gestion de fenêtres, ces fenêtres secondaires, secondary windows, sont souvent mises au dessus de leur parent et ne sont pas représentées dans la barre de tâches.

Les classes QMainWindow et QDialog ont le drapeau Qt::WA_Window dans leur constructeur, puisqu'elle sont faites pour être utilisées en tant que fenêtres et propose des fonctionnalités qui ne sont pas requises pour les widgets enfants.

Fenêtres principales et boîtes de dialogue

La fenêtre principale d'une application permet au framework de créer une interface principale pour une application en héritant de QMainWindow. La classe QMainWindow possède son propre layout, auquel vous pouvez ajouter une barre de menus, des barres d'outils, des widgets dockable et une barre de statut. La zone centrale peut être occupée par n'importe quel QWidget.

Les fenêtre de dialogue sont utilisées en tant que fenêtres secondaires, qui proposent à l'utilisateur des options et des choix. Les boîtes de dialogue sont créées en héritant de QDialog et en utilisant des widgets et layouts pour créer l'interface utilisateur. De plus, Qt fournit un certain nombre de boîtes de dialogue déjà faites, qui peuvent être utilisées pour des tâches standards comme la sélection de fichiers ou de polices.

Les fenêtres principales, comme les boîtes de dialogue, peuvent être créées avec Qt Designer, l'outil de design de Qt. Utiliser Qt Designer est plus rapide que de coder à la main et rend facile les tests de plusieurs idées de design. La création de designs et la lecture du code généré par uic est une bonne façon d'apprendre à se servir de Qt !

Géométrie des fenêtres

La classe QWidget fournit plusieurs fonctions qui s'occupent de la géométrie de la fenêtre. Certaines de ces fonctions opèrent uniquement sur l'aire de la fenêtre (c'est-à-dire sans le cadre), d'autres incluent le cadre. La différenciation est faite de façon à couvrir la plupart des usages facilement.

Notez que la distinction n'importe que pour les fenêtres de haut niveau avec cadre. Pour les widgets enfants, la géométrie du cadre est la même que celle du widget.

Ce diagramme montre la plupart des fonction utilisées :

image

Particularités de X11

Sous X11, une fenêtre n'a pas de cadre tant que le gestionnaire de fenêtre ne la décore pas. Cela se passe de façon asynchrone à un moment après l'appel de la fonction QWidget::show() et le premier événement de l'affichage que reçoit la fenêtre ou ne se fait pas du tout. Gardez en tête que X11 n'a pas de politique à ce niveau (certain diront qu'il est flexible), bien que vous ne puissiez pas faire d'assomption sûre. Règle simple : il y a toujours un utilisateur qui emploie un gestionnaire de fenêtres qui casse cette assomption et viendra se plaindre à vous.

De plus, un outil ne peut pas placer exactement une fenêtre sur l'écran. Tout ce que Qt peut faire, c'est envoyer des indices au gestionnaire de fenêtres. Ce dernier peut ensuite obéir, les ignorer ou mal les interpréter. À cause du peu clair Inter-Client Communication Conventions Manual (ICCCM), le placement des fenêtres est géré de façons différentes dans les gestionnaires existants.

X11 ne fournit pas de standard ou de manière facile de récupérer la géométrie du cadre une fois créé. Qt résout ce problème habilement et intelligemment avec un code qui fontionne sur une large partie des gestionnaires de fenêtres existants aujourd'hui. Mais ne soyez pas surpris si vous en trouvez un sur lequel la fonction QWidget::frameGeometry() retourne des résultats erronés.

X11 ne fournit pas non plus de façon d'agrandir une fenêtre. QWidget::showMaximized() doit émuler cette fonctionnalité. Le résultat dépend de celui de QWidget::frameGeometry() et de la capacité du gestionnaire de fenêtres de faire un déplacement de fenêtre correct et aucun des deux n'est garantit.

Remerciements

Merci à <!buffer!> pour la traduction et à <!dourouc!> ainsi qu'à <!jacques_jean!> pour leur relecture !

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 4.7
Copyright © 2024 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !