# 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`.

## 6.7.1. 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.

## 6.7.2. 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 :

- un pixmap d'icône optionnel. Utilisez la macro `Icon("iconname.xpm")` de `KApplication` pour obtenir une instance de l'icône fournie par `KIconLoader`& ;;

- le nom de l'entrée de menu. Ajoutez la avec la macro `i18n("&&;entryname")` de `KApplication` pour permettre l'internationalisation. Le symbole "&" doit être devant la lettre qui apparaîtra soulignée pour y accéder directement avec le clavier& ;;

- l'instance du membre à appeler. Normalement, ce devrait être le pointeur `this`.

- le slot du membre à appeler. Utilisez `SLOT(yourmethod()` pour appeler le slot lors de l'émission du signal `activated()`.

- la touche de raccourci clavier. Elle devrait être définie à zéro car ceci est fait avec une entrée dans `initKeyAccel()` où vous devez introduire une touche de raccourci clavier en même temps que le slot à appeler. Appelez ensuite `changeMenuAccel()` pour changer le raccourci clavier de l'élément de menu. Cela sera alors configurable via la boîte de dialogue de configuration des raccourcis clavier. Pour des actions standards, utilisez les valeurs énumérées données par `KAccel`.

- l'identificateur de menu défini dans `resource.h`