The K Desktop Environment

Page suivante Page précédente Table des matières

6. L'Éditeur de Boîtes de Dialogue : Où vos Boîtes de Dialogue sont Construites

6.1 Ce que fournit l'Éditeur de boîtes de dialogue

L'éditeur de boîtes de dialogue interne à KDevelop est conçu pour vous aider à construire les widgets et les boîtes de dialogue qui correspondent aux besoins de votre application et réduit significativement le temps nécessaire pour étendre l'interface graphique utilisateur (NdT : GUI) de votre application. La seule limitation actuelle est que l'éditeur de boîtes de dialogue ne supporte pas la gestion de la mise en page qui est proposée par Qt ; c'est pourquoi les boîtes de dialogue ont des tailles statiques et cela peut conduire à des situations où, par exemple, la largeur d'une étiquette (NdT : label) n'est pas assez grande pour contenir toute la longueur de sa traduction.

D'un autre côté, l'état courant de l'éditeur, associé à la gestion de projets de KDevelop, reste la façon la plus rapide de créer des applications aux fonctionnalités nombreuses pour l'Environnement de Bureau KDE.

6.2 Widgets de Qt et KDE

Actuellement, les widgets supportés sont :

Widgets de Qt :

Widgets KDE :

6.3 Propriétés des Widgets Qt supportés

Le chapitre suivant donne une vision complète des widgets de la boîte à outils Qt actuellement supportés. Pour avoir une meilleure compréhension des propriétés, elles sont séparées de leur héritage. Comme tous les widgets héritent de QWidget, cette classe est décrite en premier. Toutes les propriétés de QWidget sont disponibles pour tous les autres widgets donc elles ne seront pas listées à chaque fois. Pour les groupes de widgets qui héritent d'une sous-classe abstraite de QWidget comme classe de base, les propriétés de la classe de base sont listées en premier (bien que cette classe ne représente pas elle-même un widget dans l'éditeur de boîtes de dialogue). Ensuite, les propriétés du widget pour le widget disponible du groupe contiennent les propriétés qui lui sont spécifiques. Pour une meilleure compréhension, l'arbre d'héritage des widgets disponibles est donné ci-dessous :

Propriétés de QWidget

QWidget est la classe de base pour presque tous les widgets dans Qt et KDE. Les widgets qui héritent de QWidget permettront donc d'utiliser les mêmes paramètres dans la plupart des cas.

Widgets qui héritent de QButton

QButton est une classe de widget abstraite qui fournit des propriétés communes aux boutons.

Hérite de QWidget

Hérité par QCheckBox, QPushButton et QRadioButton.

Propriétés de QCheckBox

Hérite de QWidget et QButton

Propriétés de QPushButton

Hérite de QWidget et QButton

Propriétés de QRadioButton

Hérite de QWidget et QButton

Propriétés de QComboBox

Hérite de QWidget

(aucune propriété supplémentaire)

Widgets qui héritent de QFrame

Hérite de QWidget

Pour l'instant, seulement utilisée comme une classe abstraite.

Propriétés de QGroupBox

Hérite de QWidget et QFrame

Propriétés de QLCDNumber

Hérite de QWidget et QFrame

Propriétés de QLabel

Hérite de QWidget et QFrame

Propriétés de QProgressBar

Hérite de QWidget et QFrame

QScrollView

Hérite de QWidget et QFrame

Hérité par QListBox (abstrait pour l'instant)

Fournit un widget que l'on peut faire défiler et qui gère l'affichage d'un widget fils avec des barres de défilement verticale et horizontale.

QListView

Hérite de QWidget, QFrame et QListView

Fournit une liste pour afficher hiérarchiquement des données, soit dans une table soit dans un arbre. Gère elle-même les barres de défilement à travers QScrollView.

Propriétés de QSpinBox

Hérite de QWidget et QFrame

Widgets qui héritent de QTableView

Hérite de QWidget, QFrame et QTableView

Hérité par QListBox et QMultiLineEdit

Propriétés de QListBox

Hérite de QWidget, QFrame et QTableView

Propriétés de QMultiLineEdit

Hérite de QWidget, QFrame et QTableView

Propriétés de QLineEdit

Hérite de QWidget

Propriétés de QScrollBar

Hérite de QWidget et QRangeControl.

Propriétés de QSlider

Hérite de QWidget et QRangeControl.

6.4 Propriétés des Widgets KDE supportés

KColorButton

Hérite de QPushButton

KKeyButton

KCombo

Hérite de QComboBox

KDatePicker

KLedLamp

KProgress

KSeparator

KDateTable

KTreeList

KRestrictedLine

KLed

Hérite de QWidget

6.5 Construire une nouvelle boîte de dialogue

Élaborer une nouvelle boîte de dialogue est très facile si vous êtes déjà familier avec les applications de construction graphique. KDevelop permet de créer visuellement un widget et d'afficher son apparence telle qu'elle se présentera à l'utilisateur. En plus, vous pouvez avoir une prévisualisation de votre widget en sélectionnant "Aperçu" dans le menu "Affichage".

Pour commencer la construction d'une boîte de dialogue ou de n'importe quel widget, passez dans l'Éditeur de boîtes de dialogue et sélectionnez "Nouveau" dans le menu "Fichier". Sélectionnez "Boîte de dialogue Qt/KDE (*.kdevdlg)" dans la boîte de dialogue "Nouveau fichier" et saisissez le nom de fichier de la boîte de dialogue. Construisez votre boîte de dialogue et quand vous avez terminé, sélectionnez "Générer les fichiers sources complets" dans le menu "Construire".

Saisissez ensuite toutes les informations nécessaires dans la boîte de dialogue "Nouvelle boîte de dialogue". Ce sont :

  1. l'héritage de la boîte de dialogue. Ceci est nécessaire parce que tout widget dérive au moins de QWidget. Au-delà des types de widgets fournis par Qt, vous pouvez hériter, par exemple, d'une classe abstraite que vous avez développée vous-même au sein de votre projet. Dans ce cas, sélectionnez "Personnalisé" et saisissez le chemin menant au fichier d'en-tête dans la zone de saisie en-dessous ;
  2. le nom de la boîte de dialogue. Ceci définit le nom de la classe pour la boîte de dialogue générée. Sélectionnez un nom de classe décrivant explicitement ce que fait la boîte de dialogue ; au cas où vous héritez de QDialog, vous pourriez saisir un nom qui se termine par Dlg afin de vous aider à vous souvenir que c'est une boîte de dialogue. Les conventions de nommage devraient néanmoins correspondre à celles de KDE et Qt : utilisez des lettres majuscules pour votre nom de classe. Pour, par exemple, une boîte de sélection de taille de quadrillage (NdT : grid-size selection dialog), vous pourriez saisir GridSizeDlg.
  3. les noms des fichiers générés. Ceux-ci sont pré-définis lorsque vous donnez le nom de la boîte de dialogue mais peuvent être modifiés utlérieurement. Si vous voulez utiliser d'autres noms de fichiers, la convention de nommage devrait respecter celle de KDE et Qt : les noms des fichiers sont écrits en minuscules et contiennent le nom de la classe afin de se rappeler rapidement quelle classe est à l'intérieur. Les fichiers de données qui doivent être définis contiendront ensuite le code généré qui construira votre boîte de dialogue. Après, vous ne devrez pas éditer ce fichier manuellement ; utilisez le fichier d'implantation pour les ajouts au code de construction de la boîte de dialogue et à l'implantation des méthodes.

La boîte de dialogue s'affiche ensuite sous la forme d'un widget avec un quadrillage. Comme l'éditeur de boîte de dialogue utilise cette grille pour positionner les widgets fils, vous pouvez modifier la taille du quadrillage avec l'entrée "Taille de la grille" dans le menu "Affichage", si la valeur prédéfinie ne vous convient pas.

Sélectionnez ensuite l'onglet "Widgets" dans la partie gauche et cliquez sur le bouton du widget que vous voulez ajouter à votre widget principal. Il apparaît immédiatement dans le coin en haut à gauche du widget principal et il est sélectionné dans un cadre redimensionnable. Ensuite, déplacez ou redimensionnez le widget avec la souris. Le curseur changera pour indiquer quelle action peut être effectuée à sa position courante.

Après avoir terminé la construction, sélectionnez "Générer les fichiers" dans le menu "Construire" ou cliquez sur le bouton correspondant de la barre d'outils. Les fichiers seront ensuite générés à l'endroit prédéfini et inclus dans vos fichiers sources. Une reconstruction ou un "make" compilera tous les fichiers générés dans votre projet et vous pourrez ajouter un appel au constructeur idoine pour créer une instance de la boîte de dialogue ou du widget. Pour les projets KDE, toutes les propriétés du widget qui seront visibles, par exemple le texte d'une étiquette, sont définies avec la macro i18n() de kapp.h pour permettre l'internationalisation. C'est pourquoi, vous devriez faire un "Exécuter make messages et fusionner" lorsque vous avez terminé la construction et l'implantation.

Pendant la création d'une boîte de dialogue ou d'un widget, vous devriez respecter les règles suivantes :

6.6 Définir les Propriétés des Widgets

Les propriétés d'un widget peuvent facilement être définies avec les entrées de la fenêtre des propriétés. Quand un widget devient sélectionné, la fenêtre des propriétés est automatiquement mise à jour avec les propriétés du widget courant. Comme tous les widgets dérivent de QWidget, vous pouvez définir les propriétés QWidget ainsi que les propriétés qui sont spécifiques au widget sélectionné.

Les propriétés peuvent être des :

6.7 Intégrer la Boîte de Dialogue

Lorsque votre widget est créé, vous voulez probablement l'ajouter au projet afin d'exécuter l'action pour laquelle il a été conçu. Comme un widget peut avoir plusieurs finalités, nous allons considérer les deux cas : un widget héritant de QWidget et un autre de QDialog.

Héritage de QWidget

Supposons que vous avez créé un widget qui est un morceau de votre vue principale. S'il remplit toute la zone de vue, vous devez ajouter un pointeur d'instance à la déclaration d'en-tête de votre instance de KTMainWindow qui remplace le widget de vue actuellement défini. Modifiez ensuite le code dans la méthode initView pour définir ce widget comme la vue principale. En plus, vous pouvez supprimer la classe de vue (NdT : View class) du projet généré mais souvenez-vous que l'instance de document et l'instance de App dépendent de la classe de vue. Dans ce cas, d'un point de vue technique, il est mieux de créer une mini application KDE et de construire votre instance de KTMainWindow vous-même.

Plus souvent, le widget est juste une partie de la zone de vue, ce qui signifie qu'il est combiné avec d'autres widgets. Ceci peut être réalisé en utilisant une des classes suivantes qui fournit une division pour séparer deux widgets.

  1. QSplitter
  2. KPanner
  3. KNewPanner

Si la vue principale doit contenir plus de deux widgets, vous devez utilisez une autre instance du séparateur qui sera l'un des deux widgets gérés par le premier. Ajoutez ensuite les widgets correspondants de chaque côté et définissez le premier séparateur comme la zone de vue.

Héritage de QDialog

Si votre widget hérite de QDialog, il est probablement sensé changer une ou plusieurs valeurs ; ceci est souvent utilisé pour définir les préférences d'une application. Pour appeler la boîte de dialogue, vous devez ajouter un slot dans la classe App en ajoutant la déclaration de la méthode et le corps de son implantation. Ajoutez ensuite l'appel au constructeur ainsi que les appels à show() ou exec() de la boîte de dialogue. Enfin, vous devez veiller à traiter les résultats de la boîte de dialogue ; soit la boîte de dialogue modifie elle-même directement les valeurs du widget parent, soit elle retrouve les valeurs de la boîte de dialogue (ce qui devrait rendre votre boîte de dialogue beaucoup plus réutilisable dans d'autres projets). Pensez à appeler delete si vous aviez créé l'instance de la boîte de dialogue avec new pour éviter les fuites de mémoire.

Enfin, vous devez connecter une entrée de menu (avec l'aide correspondante dans la barre d'état) au nouveau slot qui appelle la boîte de dialogue ; facultativement, un raccourci clavier et une icône de barre d'outils. Pour cela, ajoutez un identificateur de ressource au fichier resource.h avec un define. Ajoutez ensuite une entrée de menu correspondante à l'un des menus popups déjà présents dans la barre de menus ou créez un nouveau popup pour ajouter l'entrée de menu. Une entrée de menu est constituée de :

Page suivante Page précédente Table des matières