Résumé
Traduit par Gilles Thomassin, gthom at gapline.org
Table des matières
Qt Designer se contrôle de la même façon que n'importe quelle application graphique. Pour démarrer Qt Designer sous Windows ouvrez le menu démarrer et déroulez Programmes|Qt X.x.x|Designer. (X.x.x représente le numéro de version de Qt, actuellement. 3.0.4.) Si vous utilisez un système Unix ou Linux, vous pouvez indifféremment double cliquer sur l'icône Qt Designer ou taper
designer &
dans une fenêtre terminal.
Supposons que la librairie qt soit installée dans /usr/local/qt, vérifiez que dans votre fichier .bash_profile vous disposez bien des lignes suivantes :
QTDIR=/usr/local/qt PATH=$QTDIR/bin:$PATH MANPATH=$QTDIR/doc/man:$MANPATH LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export QTDIR PATH MANPATH LD_LIBRARY_PATH
Lorsque vous avez terminé, pour quitter Qt Designer il suffit de cliquer Fichier|Quitter; on vous demandera alors si vous souhaitez enregistrer les modifications non enregistrées. L'aide apparaît en tapant F1 ou en allant dans le menu Aide.
Pour profiter au maximum des tutoriaux, nous vous recommandons de démarrer maintenant Qt Designer et de créer l'application exemple au fur et à mesure de la lecture. La plupart du travail consiste à utiliser les menus boites de dialogue et éditeurs de Qt Designer 's et nécessite très peu de code.
Quand vous démarrez Qt Designer , par défaut, vous voyez dans la partie supérieure de l'application une barre de menu ainsi que divers barres d'outils. Dans la partie gauche se trouvent 3 fenêtres, la première en partant du haut est la fenêtre des fichiers, la seconde est l'explorateur d'objets et la dernière l'inspecteur d'objets. La fenêtre "Fichiers" contient la liste des fichiers et images du projet en cours; pour ouvrir un formulaire, il suffit de cliquer sur le fichier correspondant dans la liste des fichiers. L'explorateur d'objet montre les composants du formulaire en cours d'édition ainsi que les slots associés(méthodes ou procédures). L'inspecteur d'objet quand à lui permet de visualiser et ou modifier les propriétés des formulaires ou des composants de toutes nature que vous y avez placé. Nous expliquerons le rôle des autres éléments de Qt Designer lorsque nous créeront les applications exemples.
Dans ce chapitre nous allons construire une application appelée 'multiclip' qui nous permettre de gérer les éléments contenus dans le presse papier.
Quand vous créez une nouvelle application, il est fortement recommande de créer un fichier Projet et de l'ouvrir plutôt que de créer des fichiers individuels. Utiliser un projet permet de rendre tous les formulaires du projet accessibles via un simple clic sur le fichier correspondant. Un avantage supplémentaire, les projets permettent de stocker les images relatives à une application dans un seul fichier et donc de ne plus avoir à les stocker dans chaque fenêtre qui les utilise. Allez visiter le chapitre L'approche Designer et plus particulièrement la section Gestion des Projets pour obtenir davantage de détails sur les avantages liés à l'utilisation des fichiers projets.
Démarrez Qt Designer si ce n'est déjà fait. Cliquez Fichier|Nouveau pour ouvrir la boîte de dialogue Nouveau Fichier. Cliquez sur l'icône 'C++ Projet' , puis cliquez sur OK pour définir les préférences de votre projet. Vous devrez taper le nom du projet, et nous vous recommandons de placer chaque projet dans un répertoire qui lui sera réservé. Cliquez sur le bouton... pour ouvrir la boîte de dialogue Sauver Dans As et placez vous là ou vous souhaitez enregistrer le nouveau projet. Cliquez sur l'icône Création d'un Nouveau Répertoire dans la barre d'outils afin de créer le répertoire 'multiclip'. Double cliquez sur ce répertoire pour en faire le répertoire courant. Donnez lui le nom 'multiclip.pro', and cliquez sur le bouton Sauver. Le champ 'Fichier Projet' de la boîte de dialogue Paramètres du projet dispose maintenant du nom et du chemin d'accès de votre projet; cliquez alors sur OK pour créer le projet.
Le nom du projet en cours doit maintenant apparaître dans la barre d'outils Fichiers qui se trouve en haut et à gauche par défaut. Puisque Nous disposons d'un projet, nous pouvons y ajouter des formulaires et commencer ainsi à construire notre application. (Allez voir Personnalisation de Qt Designer pour plus d'information sur la façon de modifier les fenêtre et barres d'outils de Qt Designer .)
Cliquez à nouveau sur Fichier|Nouveau pour ouvrir la boîte de dialogue Nouveau Fichier. Plusieurs types de formulaires sont proposés mais vous utiliserez le type boîte de dialogue simple, il vous suffit donc de cliquer sur OK. Un nouveau formulaire appelé 'Form1' apparaît alors. Remarquez que ce nouveau formulaire est maintenant listé dans la liste des fichiers et que l'inspecteur d'objets vous montre les propriétés par défaut du composant "Form1".
Cliquez la valeur correspond à la propriété "Name" pour donner au formulaire le nom de 'FormMulticlip'. Changer la propriété "caption" (titre) du formulaire en 'Multiclip'. Les propriétés ne sont pas triées et la propriété "caption se trouve approximativement au milieu de la liste.. Sauvez le formulaire: cliquez Fichiers|Sauver, tapez le nom 'multiclip.ui', et cliquez sur le bouton Sauver.
L'inspecteur d'objet dispose de deux colonnes: la colonne propriété qui contient le nom des propriétés et la colonne valeur qui contient les valeurs des propriétés du composant sélectionné. Certaines propriétés sont précédées du signe '+' dans un carré; cela signifie qu'il s'agit d'un groupe de propriétés portant sur un thème particulier. Cliquez sur le formulaire pour faire apparaître les propriétés de celui-ci. Cliquez alors sur le signe + à gauche de 'sizePolicy' ; vous allez voir apparaître 4 propriétés légèrement indentées par rapport é "sizePolicy": "hSizeType", "vSizeType", "horizontalStretch" et "verticalStretch". Ces propriétés peuvent être modifiées comme les autres.
Certaines propriétés ont des valeurs simples, par exemple, la propriété name a une valeur de type chaîne de caractères, la propriété width (se trouvant dans le groupe minimumSize ) dispose quand à elle d'une valeur de type entier. Pour modifier une valeur de type texte, il suffit de cliquer dedans d'effacer le texte existant et de taper le nouveau texte. Pour modifier une valeur numérique cliquez sur la valeur et soit vous tapez la nouvelle valeur soit vous utilisez les boutons d'incrémentation décrémentation jusqu'à obtenir la valeur désirée. Certaines propriétés disposent quand à elles de listes de valeurs possibles, par exemple la propriété mouseTracking est du type boolean et peut donc avoir soit la valeur 'true' soit la valeur 'false'. Il en est de même pour la propriété cursor. Si vous cliquez sur la valeur de la propriété curseur une combobox va apparaître présentant les différents curseurs de souris disponibles; il suffit de cliquer sur le bouton 'bas' pour choisir son curseur préféré. D'autres propriétés disposent d'un ensemble de données complexe; par exemple la propriété font. Quand vous cliquez sur la propriété un bouton (points de suspension) (...) apparaît; cliquer sur ce bouton fait apparaître une boîte de dialogue Select Font qui vous permettra de changer la police de caractère ainsi que son style sa couleur etc.... Certaines propriétés disposent donc d'un éditeur spécifique, ainsi si vous avez beaucoup de texte à rentrer dans une propriété texte, vous pouvez obtenir l'éditeur multiligne correspondant en cliquant sur le bouton(...).
Les noms des propriétés dont la valeur a changée sont affichés en gras. Si malencontreusement vous avez modifié la valeur d'une propriété et souhaitez revenir à la valeur par défaut, vous pouvez cliquer sur le bouton 'X' rouge à droite de la propriété pour cela. Certaines propriétés ont une valeur initiale mais pas de valeur par défaut comme par exemple 'TextEdit1', dans ce cas , un click sur le 'X' rouge provoquera l'effacement de la valeur.<<Attention, il est des circonstances où le X rouge générera le plantage de QT Designer>>
Lorsque plusieurs composants sont sélectionnés, l'inspecteur d'objet montre les propriétés communes à tous. Le changement de la valeur d'une de ces propriétés provoquera la modifications des valeurs de tous les composants pour la propriété sélectionnée. L'inspecteur d'objets supporte les opérations annuler refaire (Ctrl+Z et Ctrl+Y, disponibles aussi dans le menu Édition).
L'application multiclip est constituée d'une zone de texte permettant d'afficher le contenu courant du presse-papier (s'il n'est pas vide) et d'une liste montrant les contenus précédents, il y a aussi un indicateur sur la taille du presse-papier, une case à cocher et plusieurs boutons. Si vous exécutez l'application et la redimensionnez tous les composants seront mis à l'échelle correctement, c'est grâce au 'layout' (outil de mise en page).
La méthode Qt Designer pour mettre en page un formulaire consiste à placer approximativement les composants sur le formulaire puis d'utiliser les outils de mise en page fournis pour les redimensionner et les aligner correctement. Nous allons maintenant ajouter les composants (widgets) à notre formulaire multiclip.
Nous allons commencer par l'étiquette à gauche de la zone de texte qui va contenir le contenu en cours du presse-papier, cette étiquette va expliquer ce que contient la zone de texte. Cliquez sur le bouton Text Label dans la barre d'outils (barre des composants) puis cliquez sur votre fiche là où vous souhaitez faire apparaître le composant (en haut à gauche). (Remarquez que lorsque votre curseur de souris survole un composant de la barre d'outils, le nom du composant est affiché dans une bulle.) Nous n'avons pas besoin de changer la valeur de la propriété name de ce composant car on ne l'utilisera pas dans le code; par contre nous avons à changer le texte du label on lui fera afficher 'Contenu en cours'.
Nous allons maintenant ajouter la zone d'édition correspondante. Cliquez sur le bouton Line Edit dans la barre des composants et cliquez sur votre fiche à droite du label que vous venez de placer. Servez-vous de l'inspecteur d'objet pour modifier le nom du composant, on l'appellera 'currentLineEdit' remarquez la convention: première lettre en minuscule différents mots mis en évidence par première lettre en majuscule.
Nous allons maintenant ajouter la boîte liste ainsi que le label correspondant. Cliquez sur le bouton Text Label dans la barre de composants et cliquez sous votre label 'contenu en cours'. Tapez 'Contenus Précédents' dans la propriété text. Ce n'est pas la peine de positionner les composants avec précision, ne vous inquiétez pas non plus de leur taille. Les layout outils de mise en page s'occuperont de cela pour nous.
Nous allons maintenant placer la boîte liste. Cliquez sur le composant List Box dans la barre de composants et cliquez dans votre formulaire sous le label que vous venez de placer 'Contenus précédents'. Donner à votre Boîte liste un nom plus significatif: 'clippingsListBox'. Par défaut, Qt Designer crée les boîtes listes avec un élément: 'Nouvel Élément'. Le contenu de la listbox sera rempli par le code, on va supprimer l'élément qu'elle contient. Cliquez avec le bouton droit de votre souris sur la boîte et cliquez sur l'option Éditer du menu contextuel pour afficher l'éditeur de liste. Cliquez sur Effacer l'élément pour supprimer l'élément ajouté par défaut, puis cliquez OK.
Nous souhaitons visualiser la taille de notre presse-papier nous allons donc ajouter un label(étiquette) et un composant(widget) LCD Number.
Cliquez sur le composant Text Label dans la barre de composants placez le en face de la zone d'édition Line Edit. Modifier la valeur de sa propriété text de façon à ce qu'il affiche 'Taille'. Puis placez le composant LCD Number et placez le à côté de l'étiquette correspondante. Changez son nom en 'lengthLCDNumber'.
Notre application Multiclip peut détecter les modification dans le presse-papier et ajouter alors automatiquement les nouveaux contenus. Mais nous souhaitons que les utilisateurs puisse désactiver cette possibilité, nous allons donc fournir une case à cocher (check box) qui permettra de désactiver cette fonctionnalité.
Cliquez sur le composant Check Box dans la barre de composant et placez le sous le composant LCD Number. Changez le nom de la checkbox en 'autoCheckBox' et son texte en 'Ajout A&uto'. Remarquez que la propriété accel devient automatiquement Alt+U le caractère '&' dans le texte signifie qu'il y a un raccourci clavier avec la lettre qui suit, taper Alt+U permettra donc de cocher ou décocher la case.
Enfin les derniers composants dont nous avons besoin sont les boutons. Une des méthodes pour ajouter plusieurs composants du même type est d'en placer un de le copier et de le coller autant de fois que nécessaire. Nous allons utiliser une autre approche.
Double cliquez le composant Push Button dans la barre de composantstool; puis cliquez dans votre formulaire sous la case à cocher pour y placer votre bouton. Il suffit maintenant de recliquer sous le bouton précédent pour en ajouter un nouveau. Procédez de la même façon pour le troisième et quatrième bouton. Pour désactiver l'ajout automatique du même composant cliquez le bouton Pointer de la barre d'outils. Changez maintenant les noms des boutons et leur texte. Le premier aura pour nom: 'addPushButton' et pour texte '&Ajoute un contenu'. Le second aura pour nom: 'copyPushButton' et pour texte '&Copier Précédent'.Le troisième aura pour nom 'deletePushButton' et pour texte '&Efface Contenu'. Enfin le dernier aura pour nom 'quitPushButton' et pour texte '&Quitter'.
Tous les composants sont maintenant placés sur le formulaire, leurs propriétés ont été modifiées pour répondre aux besoins de l'application. Dans la section suivante nous allons utiliser les outils de mise en page de Qt Designer pour redimensionner et aligner correctement les composants.
Tandis que l'éditeur de propriétés s'utilise pour personnaliser les propriétés génériques des composants, les éditeurs de valeurs sont utilisés pour éditer les valeurs gérées par les instances des composants particuliers. Par exemple, un QLineEdit ne peut contenir qu'une seule ligne de texte, par contre une QListBox peut contenir un nombre variable d'éléments chacun pouvant être composé d'une ligne de texte, d'une image ou des deux à la fois. Pour ouvrir l'éditeur de valeurs correspondant à une instance de composant il faut double-cliquer sur le composant. (Vous pouvez aussi l'obtenir grâce au menu contextuel du composant(bouton droit)). Chaque composant (widget) dispose de son éditeur de valeurs. Voir le chapitre éditeurs de valeurs pour plus de détails.
Les layouts fonctionnent en groupant ensemble des composants ou des groupes de composants, cela peut se faire horizontalement, verticalement ou dans une grille. Les composants qui sont groupés horizontalement ou verticalement peuvent l'être soit par une layout soit par un splitter, la seule différence est que le splitter est manipulable par l'utilisateur du programme.
Lorsque nous souhaitons disposer 2 composants côte à côte on les sélectionne puis on clique sur le bouton Répartir Horizontalement de la barre d'outil. Si l'on veut les mettre l'un sous l'autre il faudra cliquer sur le bouton Répartir Verticalement. Une fois que l'on a groupé les libellés avec leur zone d'édition correspondantes, on pourra mettre les groupes ainsi formés en relation les uns avec les autres, en utilisant des layout horizontales, verticales ou en grille. Lorsque les relations entre les groupes sont établies, on clique sur le formulaire et on aligne les groupes dans le formulaire en utilisant à nouveau les boutons appropriés.
Certains Composants vont grandir jusqu'à remplir l'espace disponible soit verticalement soit horizontalement soit dans les deux sens. Les boutons et les zones d'édition vont utiliser par exemple tout l'espace horizontal, une ListView quand à elle va remplir l'espace dans toutes les directions. La meilleure méthode pour réussir les mise en page consiste donc à utiliser les outils layout de Qt Designer. Il se peut toutefois que dans certaines situations, les composants ne réagissent pas tout à fait comme vous l'auriez souhaité Si un composant ne prend pas assez de place essayez de changer sa propriété sizePolicy à Expanding. Si au contraire un composant prend trop de place, une des méthode est aussi de modifier la valeur de sa propriété sizePolicy, mais vous pouvez aussi ajouter un Spacer (espaceur) qui va consommer l'espace libre disponible.
Les Spacers ne sont pas visibles lors de l'exécution de votre application et ne servent qu'a mettre des espaces entre les composants ou groupes de composants. Supposons que vous avez un composant trop gourmand en espace. Il vous faut casser le layout redimensionner le composant pour faire de la place au spacer. Vous insérez ensuite le spacer et reformez la layout en y incluant les composants et le spacer. Lorsqu'un spacer à son tour prend une place incorrecte, utilisez sa propriété sizePolicy pour contrôler son comportement.
La meilleure façon d'apprendre à utiliser les "layouts" et les "spacers" est certainement l'expérimentation. Utiliser les layout est facile. Si vous réalisez des modifications malheureuses, vous pouvez toujours les annuler en cliquant sur Éditer|Défaire ou en tapant Ctrl+Z. Dans la section suivante, nous allons mettre en page les composants de notre application support.
Les layouts sont un moyen de grouper les composants ou groupes de composants par deux par deux horizontalement ou verticalement ou dans des tableaux. Lorsque vous utilisez les layouts vos formulaire et les composants qu'ils contiennent seront mis à l'échelle automatiquement lorsque l'utilisateur redimensionne sa fenêtre. C'est donc bien mieux que de donner des tailles ou positions fixes, puisque vous n'avez pas à programmer le code qui permet le redimensionnement, les utilisateurs pourront profiter de tout leur écran, quelle que soit leur résolution. Les Layouts utilisent des dimensions standards pour les marges et les espaces entre les composants, cela contribue à donner à votre application un aspect consistant et professionnel sans effort de votre part. Comme nous l'avons déjà dit, il suffit de placer les composants approximativement à l'endroit où vous souhaitez les placer, puis de laisser les layout les aligner et les redimensionner correctement.
Pour choisir un composant, vous pouvez soit le cliquer dessus dans votre formulaire ou cliquer sur con nom dans l'explorateur d'objet. Pour sélectionner un groupe de composant cliquer de même soit à peine en-dehors de la ligne rouge qui le matérialise, soit sur son nom dans l'inspecteur d'objets. Pour sélectionner plusieurs composants ou groupes de composants, cliquez sur le formulaire pour annuler toute sélection précédente, et Ctrl+Cliquez le premier composant de votre sélection et faites glisser votre zone de sélection de façon à ce qu'elle touche tous les composants souhaité. Cette technique est particulièrement efficace pour sélectionner des composants se trouvant eux-mêmes inclus dans un autre composant. Par exemple, pour sélectionné des boutons radio dans un groupe de bouton mais pas le groupe lui-même, vous cliquez sur le formulaire puis Ctrl+Cliquez un des boutons et étendez la zone de sélection jusqu'à ce qu'elle touche les autres boutons.
Si nous souhaitons insérer un composant dans un espace entre d'autres composants, qui sont dans une layout vous sélectionnez le composant dans la barre de composant puis on clique dans l'espace. Qt Designer nous demandera s'il faut casser la layout et si on lui répond favorablement, la layout est cassée et notre composant est inséré. On peut alors sélectionner les composants et reformer la layout. Pour casser la layout on peut aussi cliquer dessus puis appuyer sur le bouton casser la mise ne page de la barre d'outil ou taper Ctrl+B.
La mise en page que l'on souhaite obtenir est d'avoir le contenu courant du presse-papier et le label correspondant côte à côte en haut de la fiche. Nous souhaitons de même que la boîte liste qui contient les contenus précédents et le label qui correspond occupent tout l'espace restant du côté gauche de notre formulaire, les autres composants occupant la partie droite. On veut séparer les parties gauches et droites par un splitter (redimensionnable par l'utilisateur)Nous souhaitons aussi que la partie gauche soit par défaut la plus large. Nous allons laisser à Qt Designer le soin de gérer la taille des composants. Les contrôles de mise en page sont dans la barre d'outils "Layout". (4ème barre d'outils en partant de la gauche.) Nous allons maintenant mettre en page les composants que nous avons placé sur notre formulaire.
Cliquez sur l'étiquette contenu courant et Shift+Cliquez sur le Line Edit currentLineEdit. (Shift+Cliquez signifie appuyez sur la touche "shift" du clavier pendant que vous cliquez sur le composant avec le bouton gauche de la souris). Vos deux composants sont maintenant sélectionnés, cliquez sur le bouton réparti horizontalement toolbar buttons will now be available. Cliquez sur le bouton Répartir Horizontalement de la barre d'outils. Vos deux composants vont alors se déplacer ensemble et un cadre rouge va les entourer Ne vous inquiétez pas si les composants n'ont pas la bonne taille ou ne sont pas exactement à l'endroit désiré, au fur et à mesure de nos travaux Qt Designer va les retailler et les placer correctement.
Cliquez l'étiquette contenus précédent et Shift+Cliquez la boîte liste correspondante, cliquez ensuite sur le bouton répartir verticalement de la barre d'outils mise en page.
Nous souhaitons que les autres composants restent groupés verticalement. Nous pourrions tous les Shift+Cliquer individuellement mais l'on va plutôt cliquez sur notre formulaire au-dessus de l'étiquette taille, et faire glisser notre pointeur légèrement plus bas que le plus bas des composants. Vous devriez maintenant avoir tous les composants de droite sélectionnés (si certains vous ont échappé vous n'avez qu'à les shift-cliquer). Cliquer alors sur le bouton répartir verticalement de la barre d'outils mise en page.
Nous disposons maintenant de trois groupes de composants qui doivent maintenant être mis en page les uns par rapport aux autres dans le formulaire.
On utilise le Shift+Click pour sélectionner des composants un par un. Pour sélectionner un groupe, vous devez cliquer sur le formulaire de façon à annuler toute sélection précédente, Vous pouvez ensuite Ctrl+Cliquer le groupe puis sans relâcher le bouton de la souris, étendre la sélection de façon à ce qu'elle touche les autres groupes que vous voulez sélectionner. Sélectionnez de cette façon le groupe qui contient la boîte liste et le groupe qui contient les boutons. Cliquez alors sur le bouton répartir horizontalement (dans un Splitter) de la barre d'outils Mise en page.
Nous avons maintenant deux groupes, l'un au-dessus de l'autre, Il va falloir maintenant les mettre en page dans le formulaire lui-même, pour cela il suffit de cliquer maintenant sur le formulaire puis de cliquer sur le bouton répartir horizontalement de la barre d'outils. Les composants vont changer de taille et remplir tout le formulaire.
Malheureusement, l'étiquette "Taille" et le nombre LCD prennent trop de place, il va donc falloir revoir la mise en page. Vous verrez avec l'expérience qu'il est rare d'avoir à retoucher les layouts. Pour régler ce problème, nous allons insérer un spacer qui va consommer l'espace excédentaire.
Tout d'abord, il faut faire de la place pour le spacer. Cliquez sur le nombre LCD. Cliquez ensuite sur le bouton casser la mise en page de la barre d'outils, déplacer le lcd un petit peu vers le haut, il n'est pas nécessaire de le positionner exactement, mais juste de créer un petit espace sous le composant de façon à pouvoir y insérer un spacer.
Nous allons maintenant ajouter le spacer. Cliquez sur le bouton spacer de la barre d'outils, puis cliquez dans le formulaire dans l'espace que vous avez créé précédemment. Un menu contextuel avec deux options Horizontal and Vertical, va apparaître; cliquez sur Vertical. On choisit vertical parce que le spacer va consommer l'espace vertical excédentaire.
Il nous faut maintenant former un groupe vertical pour les boutons le spacer, le LCD et son étiquette. Sélectionnez ces composants et cliquez sur le bouton répartir verticalement de la barre d'outils.
Vous devez maintenant retrouver les trois groupes que vous aviez constitué précédemment regroupez les deux du bas dans un splitter (les sélectionner puis cliquez sur le bouton répartir horizontalement dans un splitter).
Enfin il va falloir mettre en page le formulaire lui-même. Cliquez sur le formulaire et cliquez répartir Verticalement. Enfin le formulaire est mis en page correctement.
Il y a tout de même 2 petits défauts dans la mise en page que nous avons réalisée. Premièrement, la boîte liste et les boutons prennent la même largeur, alors que nous souhaitons que la boîte occupe les trois quarts de la largeur totale. Deuxièmement, l'étiquette taille , la case à cocher et les boutons touchent le splitter, il serait plus judicieux de laisser une petite marge.
Si l'on souhaitait que la listbox tienne la moitié du splitter, il faudrait coder une méthode init() du formulaire qui contiendrait le code suivant:
void MulticlipForm::init()
{
QValueList< int > sizes;//déclaration d'une liste de valeurs du type entier appelée "sizes"
sizes << 250 << 40;//on y met deux éléments:250 et 40
Splitter->setSizes( sizes ); on appelle la méthode setSizes du splitter avec la liste en paramètre
}
Nous n'allons pas ajouter cette méthode, On travaillera sur le code de l'application un peu plus tard.
Nous allons mettre de l'espace autour du splitter en modifiant les marges des groupes qu'il relie. Pour sélectionner une layout cliquez à peine en dessous du trait rouge qui l'entoure ou sélectionnez la layout dans l'explorateur d'objet. Cliquez sur la layout qui contient la boîte liste,et donner la valeur 6 à la propriété layoutMargin, valider par la touche Enter du clavier. Faîtes de même pour la layout qui contient les boutons.
On ouvre la fenêtre Explorateur d'objets (Widgets et Source) en cliquant Fenêtres|Vues|Explorateur d'objets. L'explorateur d'objets est composé de deux onglets, l'onglet widget (ou composant) montre la hiérarchie des objets, l'onglet source montre quand à lui les fonctions que vous avez ajouté à votre formulaire. Lorsque vous cliquez sur le nom d'un composant (widget) dans l'explorateur d'objet, le composant se retrouve sélectionné dans le formulaire, et l'inspecteur d'objet vous montre les valeurs de ses propriétés. Il est facile de voir et sélectionner les composants dans l'explorateur d'objets.
Dans la version précédente de Qt Designer lorsque l'on voulait donner du code à un formulaire, il fallait en dériver une sous-classe et en surcharger les méthodes. Cette version supporte encore cette approche, mais propose désormais une alternative: placer votre code directement dans le formulaire. Écrire son code dans Qt Designer est différent de la dérivation de classe, par exemple, vous n'avez pas accès au constructeur ou destructeur du formulaire. Si vous souhaitez que du code soit exécuté à la création du formulaire, il faut implémenter une méthode (un slot) init du formulaire void init(); lorsqu'elle existe elle est appelée par le constructeur. De même si vous avez du code à exécuter avant destruction, il faudra implémenter un slot (une méthode) appelée void destroy(). Vous pouvez aussi ajouter vos propres variables de classes qui seront placées dans le code du constructeur généré par QT Designer, vous pouvez aussi ajouter des déclarations externes et des directives include comme vous le souhaitez. Pour ajouter une variable ou déclaration, cliquez avec le bouton droit de la souris sur l'élément correspondant dans l'onglet sources de l'explorateur d'objets: Class Variables, cliquez alors sur Nouveau et rentrez votre déclaration par exemple: QString fileName attention, ne rentrez ni ";" ni commentaire "//" déclaration de la variable de classe fileName du type chêne. S'il existe un ou plusieurs éléments, le click droit ouvre un menu contextuel composé des options Nouveau et Supprimer. Pour éditer le code, il suffit de cliquer sur le nom de la méthode dont vous souhaitez éditer les instructions. Mais nous verrons cela ultérieurement.
Si vous dérivez une sous-classe du formulaire, il faut créer votre propre fichier.cpp qui contiendra votre propre constructeur, destructeur, signaux et slots en fonction de vos besoins. (Voir Subclassing pour plus d'information.)
Bien que Qt Designer montre une image assez fidèle de la présentation du formulaire en cours d'exécution, vous pouvez avoir un aperçu de son apparence avec différents gestionnaires de fenêtre. C'est utile notamment pour voir comment les composants réagissent lors d'un redimensionnement du formulaire, ou pour voir comment opère un splitter etc... Si vous développer pour plusieurs plateformes, il faut tester l'apparence d'un formulaire sous ces différents environnements.
Pour voir un aperçu cliquez sur Aperçu|Aperçu de la fenêtre ou tapez Ctrl+T. Pour quitter le mode aperçu fermez la fenêtre de pré-visualisation. Pour avoir un aperçu sous différents systèmes cliquez sur l'option correspondante au système dans le menu Aperçu.
Réalisez un aperçu du formulaire multiclip et testez le fonctionnement du splitter, testez aussi la réduction et l'agrandissement du formulaire. Vous avez dû certainement déplacer le splitter vers la droite pour réduire la largeur des boutons. Le splitter semblait être une bonne idée, mais en pratique, il est préférable de réserver à ce genre de composant une largeur fixe correspondant au minimum nécessaire. Comme QT Designer permet une modification somme toute assez facile, nous allons modifier la mise en page immédiatement.
Cliquez sur le splitter puis cliquez sur le bouton Casser la mise en page de la barre d'outils, le splitter est alors enlevé. Maintenant cliquez sur le formulaire, vers le bas, étendez le zone de sélection pour qu'elle englobe la boîte liste et les boutons. Cliquez ensuite sur répartir horizontalement de la barre d'outils. Cliquez ensuite sur la forme elle-même et cliquez sur répartir horizontalement. Le formulaire est maintenant mis en page correctement, essayez un aperçu en tapant Ctrl+T et essayez d'agrandir ou réduire la fenêtre.
Il serait utile d'expérimenter d'avantage le système de layout. Sa mise en place est visuelle et on apprends mieux en pratiquant.Pour enlever une layout, il suffit de cliquer sur le bouton Break Layout de la barre d'outils; pour mettre en place une layout on sélectionne les groupes ou widgets concernés puis on clique sur un des boutons de mise en page. N'hésitez pas à vous servir souvent de l'aperçu et ainsi vous rendre compte des changements que vous avez opéré.
Faisons maintenant une expérience pour comprendre comment marchent les layouts. Cliquez sur la boîte liste, puis tapez Ctrl+B (cassez la mise en page ). Cliquez sur un des boutons et tapez Ctrl+B. Cliquez quelque part en bas du formulaire et sans relâcher la pression sur le bouton de la souris remonter jusqu'à ce que tous les widgets soient en contact avec la zone de sélection ainsi formée ( excluez toutefois le label "contenu en cours" et la zone d'édition currentLineEdit ); . Tapez Ctrl+G (aligner dans une grille). Cliquez sur le formulaire , puis cliquez Ctrl+L (aligner verticalement ). La mise en page initiale est revenue -- mais cette fois en utilisant une layout du type grille.
Les utilisateurs qui utilisent le clavier tapent la touche Tab pour passer d'une zone de saisie à la suivante. L'Ordre dans lequel les zones de saisie doivent être remplies s'appelle l'ordre de tabulation. Faites un aperçu de multiclip (tapez Ctrl+T) essayez de tabuler entre les différentes zones de saisie. Il se peut que l'ordre de tabulation ne corresponde pas à vous souhaits, il est possible de le modifier.
Lorsque vous cliquez sur le bouton Ordre de Tabulation de la barre d'outils, un disque bleu apparaît vis à vis de chaque zone interactive. Les numéros dans les disques sont le numéro d'ordre de saisie du composant dans le formulaire. Vous modifiez l'ordre de tabulation en cliquant les composants dans l'ordre où ils devront être saisis. Si vous vous trompez et que vous devez recommencer, double cliquez le widget qui doit être saisi en premier, puis cliquez sur les suivants dans le bon ordre. Quand c'est terminé tapez la touche Esc/Echap pour quitter le mode ordre de tabulation.
Cliquez sur le bouton Ordre de tabulation de la barre d'outils, puis cliquez sur le lineedit même si il a déjà le numéro un. Puis cliquez dans l'ordre sur la listbox, la case à cocher puis les boutons de haut en bas. Tapez la touche Echap du clavier quand c'est terminé.
Qt fournit un mécanisme de signaux et slots pour permettre la communication entre les composants. Un signal est un événement, un slot est une action. Les signaux sont émis par les composants, lorsqu'un événement particulier se produit. Nous pouvons connecter les signaux à des slots, que ceux-ci soient prédéfini, ou que vous les ayez créé vous-même (Pour de plus amples explications sur le mécanisme signaux, slots de QT voir la documentation en ligne Signaux et Slots .)
Certaines des fonctionnalités de l'application peuvent être obtenues simplement en connectant des signaux prédéfinis à des slots également prédéfinis. Dans notre application multiclip, il n'y a qu'une seule connexion prédéfinie que l'on peut utiliser, mais dans l'application qui suivra Créer une fenêtre principale avec des actions, des menus et des barres d'outilson en utilisera beaucoup de façon à coder le moins possible.
Nous allons nous contenter ici de connecter le signalclicked() du bouton Quitter au slot accept() du formulaire. Le slot accept() est le slot qui averti celui qui a invoqué le dialogue que le dialogue est terminé; comme notre dialogue est ici notre fenêtre principale, cela fermera l'application. Faîtes un aperçu du formulaire (en tapant Ctrl+T); et cliquez sur le bouton Quitter. Le bouton marche, mais rien ne se passe. Tapez Esc ou fermez la fenêtre aperçu.
Cliquez sur le bouton Connecter Signaux/Slots de la barre d'outil. Cliquez sur le bouton Quitter dans le formulaire, faîtes glisser, relâchez sur le formulaire. La boîte de dialogue Éditer les Connections va apparaître. La liste de gauche permet de choisir les signaux que le composant que vous avez sélectionné est capable d'émettre. La liste de droite quand à elle vous propose les slots qui peuvent recevoir le signal en question. La combobox en haut vous montre les composants de la forme, elle contient normalement multiclipform puisque vous avez relâché la souris sur elle. Notez que ne sont montrés dans la liste de droite que des slots compatibles avec le signal sélectionné, si vous sélectionnez le signal toggled(), la liste des slots candidats à la connexion sera différente. Dans notre application nous souhaitons connecter le signal clicked() du bouton Quitter au slot accept() de multiclipform, sélectionnez les donc et cliquez sur connecter, la connexion va apparaître dans la grille du bas. Cliquez sur OK pour fermer la boîte de dialogue.
Nous réaliserons beaucoup de connections signal/slot au cours de nos travaux sur les exemples, y compris des connexions vers des slots que l'on aura développé nous-mêmes. Les connections Signal/slot connections (qui utilisent des signaux et des slots prédéfinis) marchent dans le mode aperçu. Tapez Ctrl+T pour obtenir un aperçu du formulaire; cliquez le bouton Quitter. Cela devrait fermer le formulaire.
Certaines des fonctionnalités de l'application peuvent être obtenues simplement en connectant des signaux prédéfinis à des slots également prédéfinis. Dans notre application multiclip, il n'y a qu'une seule connexion prédéfinie que l'on peut utiliser, mais dans l'application qui suivra Créer une fenêtre principale avec des actions, des menus et des barres d'outils on en utilisera beaucoup de façon à coder le moins possible.
Nous allons nous contenter ici de connecter le signal clicked() du bouton Quitter au slot accept() du formulaire. Le slot accept() est le slot qui averti celui qui a invoqué le dialogue que le dialogue est terminé; comme notre dialogue est ici notre fenêtre principale, cela fermera l'application. Faîtes un aperçu du formulaire (en tapant Ctrl+T); et cliquez sur le bouton Quitter. Le bouton marche, mais rien ne se passe. Tapez Esc ou fermez la fenêtre aperçu.
Cliquez sur le bouton Connecter Signaux/Slots de la barre d'outil. Cliquez sur le bouton Quitter dans le formulaire, faîtes glisser, relâchez sur le formulaire. La boîte de dialogue Éditer les Connections va apparaître. La liste de gauche permet de choisir les signaux que le composant que vous avez sélectionné est capable d'émettre. La liste de droite quand à elle vous propose les slots qui peuvent recevoir le signal en question. La combobox en haut vous montre les composants de la forme, elle contient normalement multiclipform puisque vous avez relâché la souris sur elle. Notez que ne sont montrés dans la liste de droite que des slots compatibles avec le signal sélectionné, si vous sélectionnez le signal toggled(), la liste des slots candidats à la connexion sera différente. Dans notre application nous souhaitons connecter le signal clicked() du bouton quitter au slot accept() de multiclipform, sélectionnez les donc et cliquez sur connecter, la connexion va apparaître dans la grille du bas. Cliquez sur OK pour fermer la boîte de dialogue.
Nous réaliserons beaucoup de connections signal/slot au cours de nos travaux sur les exemples, y compris des connexions vers des slots que l'on aura développé nous-mêmes. Les connections Signal/slot connections (qui utilisent des signaux et des slots prédéfinis) marchent dans le mode aperçu. Tapez Ctrl+T pour obtenir un aperçu du formulaire; cliquez le bouton Quitter. Cela devrait fermer le formulaire.
Dans la première version de Qt Designer vous pouviez créer les en-têtes de vos propres slots et réaliser les connections, mais vous ne pouviez pas les implémenter (tapez les instructions qui composent le slot). Il fallait créer une classe dérivée du formulaire et coder les slots de la classe dérivée. Cette façon de faire est toujours possible et prend encore tout son sens dans certaines situations. Mais à partir de la version 3 de QT vous pouvez maintenant tapez votre code directement dans les slots, ainsi pour beaucoup de fenêtre et boîtes de dialogue, la dérivation de classe ne sera plus utile.(Qt Designer stocke les slots avec leur code dans le fichier .ui.h ; voir La méthode.ui.h dans le chapitre L'Approche Designer pour plus d'information sur ces fichiers.)
L' application multiclip nécessite quatre slots , un pour chaque bouton, Comme on a déjà connecté le bouton quitter, il ne nous reste que trois slots personnalisés à développer. Il nous faut donc un slot correspondant au clic sur le bouton ajouter contenu; lors d'un clic sur ce bouton, le contenu courant sera ajouté à la liste des contenus. Au bouton Copier Précédent correspondra un slot qui va copier l'élément sélectionné de la liste dans la zone de texte contenu courant (et dans le presse-papier). Le bouton Supprimer permettra quand à lui de supprimer soit le contenu courant du presse-papier soit un élément de la liste. Nous auront aussi besoin d'un peu de code de façon à ce que lors du lancement de l'application, notre zone contenu courant contienne le contenu effectif du presse-papier. Le code sera écrit directement dans QT Designer, les instructions seront enregistrées dans le fichier multiclip.ui.h.
Nous allons avoir besoin de l'objet global clipboard de Qt object que l'on obtient soit par QApplication::clipboard() soit par qApp->clipboard() (cela dépend de l'endroit où l'on se trouve). Afin d'appeler les différentes méthodes qu'il propose, nous conserverons dans notre formulaire un pointeur vers cet objet. Cliquez sur l'onglet source de l'explorateur d'objet,(Si l'explorateur d'objet n'est pas visible, cliquez Fenêtres|Vues|Explorateur d'Objet.) L'onglet source vous montre les fonctions du formulaire, les variables de classe, les déclarations externes, et les noms des fichiers include.
Cliquez avec le bouton droit sur l'élément Variables de classe (se trouve vers le bas, il se peut que vous ayez à utiliser l'ascenseur), cliquez alors sur Nouveau dans le menu contextuel. Tapez alors la déclaration suivante: 'QClipboard *cb;' et validez en tapant la touche Entrée du clavier. Voilà nous avons donc créé une variable de classe appelée cb pointeur vers une instance de la classe Qclipboard. Dans la méthode init() du formulaire que nous allons créer, nous ferons pointer cb sur l'objet global clipboard de QT. Afin de rendre disponible la classe Qclipboard, il nous faudra inclure le fichier .h correspondant. Cliquez avec le bouton droit sur l'élément Includes (dans la Déclaration), et cliquez sur l'élément Nouveau du menu contextuel. Tapez '<qclipboard.h>' and tapez Entrée. Comme nous devons aussi nous référer à l'objet global application qApp: on doit ajouter le fichier include correspondant: '<qapplication.h>' mais cette fois dans l'élément include dans l'implémentation. La variable et les déclarations vont être inclues dans le code généré par Qt Designer dans le fichier .ui.
Nous allons invoquer l'éditeur de code de Qt Designer et taper les instructions.
Nous allons commencer par créer la méthode init(). Une des façons d'ouvrir l'éditeur de code est de cliquer sur l'onglet source de l'explorateur d'objet puis de cliquer sur le nom de la méthode que l'on souhaite éditer. Si vous n'avez pas encore de fonction ou souhaitez en créer une nouvelle, vous devez utiliser l'onglet source. Cliquez avec le bouton droit sur l'élément 'protecteur' dans la liste des slots de l'onglet source, puis cliquez Nouveau dans le menu contextuel cela ouvre la boîte de dialogue Édition des Slots. Changer le nom du slot 'newSlot' en 'init()' et cliquez OK. L'éditeur apparaît et vous pouvez y taper votre code.(quelques éléments : init() est une méthode de la classe QmulticlipForm, init() est protégée elle ne pourra pas être appelée que depuis une méthode de l'objet lui-même).
Notez que vous n'êtes pas obligé d'utiliser l'éditeur de code de Qt Designer; pensez bien par contre à ajouter, supprimer, renommer vos slots en utilisant Qt Designer et jamais "à la main". Si vous utilisez un autre éditeur, ne modifiez que les instructions à l'intérieur des méthodes. Qt Designer préservera le code que vous avez tapé.
void FormMulticlip::init()
{
lengthLCDNumber->setBackgroundColor( darkBlue );
currentLineEdit->setFocus();
cb = qApp->clipboard();
connect( cb, SIGNAL( dataChanged() ), SLOT( dataChanged() ) );
if ( cb->supportsSelection() )
connect( cb, SIGNAL( selectionChanged() ), SLOT( selectionChanged() ) );
dataChanged();
}
La première ligne modifie la couleur de fond du composant lengthLCDNumber, on aurait pu le faire aussi à la conception. La deuxième ligne donne le focus au composant currentLineEdit. On fait pointer cb vers l'instance qApp->clipboard(). Puis nous connectons le slot dataChanged()de notre formulaire au signal datachanged de cb. On créera nous-mêmes ce slot datachanged bientôt. Si le presse-papier supporte la sélection (comme sous le système X Window), on peut aussi connecter le signal selectionChanged() du presse-papier au slot du même nom de notre formulaire que nous créerons plus tard. Enfin on exécute le slot dataChanged() de notre formulaire pour faire apparaître dans la zone de saisie contenu courant, le contenu du presse-papier lors du lancement de l'application.
Nous avons fait référence à deux slots : dataChanged() et selectionChanged() et nous allons donc les coder, commençons par dataChanged().
void FormMulticlip::dataChanged()
{
QString text;
text = cb->text();
clippingChanged( text );
if ( autoCheckBox->isChecked() )
addClipping();
}
On met dans une variable locale text le contenu du presse-papier, et on appelle notre slot clippingChanged() en lui passant en paramètre le contenu du presse-papier. Si la case ajout auto est cochée, on appelle le slot addClipping() pour ajouter le contenu courant du presse-papier à la boîte liste.
Le code qui suit s'applique uniquement à X Window. Les utilisateurs de Microsoft Windows peuvent tout de même inclure ce code pour être sûr que leur application tournera sur toutes les plateformes.
void FormMulticlip::selectionChanged()
{
cb->setSelectionMode( TRUE );
dataChanged();
cb->setSelectionMode( FALSE );
}
On dit au presse-papier d'utiliser le mode de sélection, et on appelle le slot dataChanged() pour récupérer le texte sélectionné, puis on remet le presse-papier dans son mode de sélection par défaut.
Codons maintenant un autre de nos slots, clippingChanged().
void FormMulticlip::clippingChanged( QString clipping )
{
currentLineEdit->setText( clipping );
lengthLCDNumber->display( (int)clipping.length() );
}
On met la bonne valeur dans la zone de texte contenu courant et on met à jour la taille en lui donnant la longueur (en caractère) de la chaîne.
Le prochain slot que nous allons coder va répondre à l'ajout de contenu dans la liste. Ce slot est appelé en interne par le slot dataChanged() implémenté ci-dessus), il est aussi appelé lorsque l'utilisateur clique sur le bouton Ajouter contenu. Comme nous souhaitons que Qt Designer soit capable de réaliser une connexion entre le signal clicked du bouton et le slot en question, nous laisseront Qt Designer créer le squelette du slot pour nous. Cliquez sur Éditer|Slots pour ouvrir la boîte de dialogue d'édition des slots. Cliquez sur Nouveau Slot et remplacez le nom par défaut 'new_slot()' par 'addClipping()'. Pas besoin de changer le mode d'accès ou le type de la valeur renvoyée. Maintenant que nous avons créé le slot nous pouvons en taper les instructions puisque l'éditeur est maintenant visible.
Le bouton ajouter contenu est utilisé pour copier le contenu courant dans la boîte liste, on mettra à jour aussi la taille du contenu du presse-papier.
void FormMulticlip::addClipping()
{
QString text = currentLineEdit->text();
if ( ! text.isEmpty() ) {
lengthLCDNumber->display( (int)text.length() );
int i;
for (i=0 ; i < (int)clippingsListBox->count(); i++ ) {
if ( clippingsListBox->text( i ) == text ) {
i = -1; // Do not add duplicates
break;
}
}
if ( i != -1 )
clippingsListBox->insertItem( text, 0 );
}
}Si le texte n'est pas vide, on change la valeur du LCD. Puis nous regardons dans la liste si le texte n'est pas présent. Si le texte n'est pas présent, on l'ajoute à la liste.
Il va falloir maintenant connecter le signal clicked() du bouton Ajoute contenu à notre slot addClipping(). Cliquez sur le bouton Connecter Signals/Slots de la barre d'outils. Cliquez sur le bouton Ajoute contenu, glissez jusqu'au formulaire et relâchez le bouton de la souris. (assurez-vous d'avoir bien relâché sur le formulaire et non sur un composant du formulaire. Si vous vous êtes trompé, sélectionnez multiclipform dans la combobox.) La boîte de dialogue éditer les connections va apparaître. Cliquez sur le slot addClipping(). Cliquez sur connecter puis OK pour confirmer la connexion.
Le bouton Copier Précédent est utilisé pour placer un contenu précédent aussi bien dans la zone d'édition que dans le presse-papier. La marche à suivre est la même que pour le bouton Ajouter Contenu: d'abord on crée le slot, ensuite on l'implémente et finalement on connecte le slot au signal clicked() du bouton :
Créer le slot. Cliquez sur le menu Édition|Slots pour ouvrir la boîte de dialogue d'édition des slots. Cliquez Nouveau Slot et remplacez le nom par défaut 'new_slot()' par 'copyPrevious()'. Cliquez OK.
Implémenter le code du slot.
void FormMulticlip::copyPrevious()
{
if ( clippingsListBox->currentItem() != -1 ) {
cb->setText( clippingsListBox->currentText() );
if ( cb->supportsSelection() ) {
cb->setSelectionMode( TRUE );
cb->setText( clippingsListBox->currentText() );
cb->setSelectionMode( FALSE );
}
}
}
Dans le code, on vérifie d'abord qu'il y a bien un élément de la liste sélectionné. S'il y en a un celui-ci est copié dans la zone d'édition Si le système utilisé supporte la sélection la copie doit être refaite avec le mode sélection activé. Le presse-papier n'est pas explicitement modifié parce que lorsque on modifie la zone de texte, le signal datachanged() est émis par le système. Ce signal est attaché au slot datachanged() et dans le code de ce slot, le presse-papier est mis à jour.
Connecter au slot. Cliquez sur le bouton Connecter Signals/Slots de la barre d'outils. Cliquez sur le bouton Copier Précédent, et allez relâcher sur le formulaire. La boîte de dialogue Éditer les Connections apparaîtra. Cliquez sur le signal clicked() et sur le slot copyPrevious(). Cliquez OK.
De la même manière occupons-nous du bouton Effacer Contenu.
Cliquez sur Éditer|Slots pour ouvrir la boîte de dialogue Éditer les Slots. Cliquez Nouveau Slot et remplacer le nom par défaut par 'deleteClipping()'. Cliquez OK.
Le bouton Delete doit effacer l'élément sélectionné de la liste et effacer la zone d'édition.
void FormMulticlip::deleteClipping()
{
clippingChanged( "" );
clippingsListBox->removeItem( clippingsListBox->currentItem() );
}
On appelle notre slot clippingChanged() en lui passant en paramètre une chaîne vide et on utilise la méthode removeItem() de la boîte liste pour effacer l'élément sélectionné.
Connectons maintenant le signalclicked() du bouton effacer contenu à notre slot deleteClipping(). (Tapez F3 -- c'est équivalent au clic sur le bouton Connecter Signals/Slots de la barre d'outils. Cliquez sur le bouton Effacer contenu et allez relâcher sur le formulaire. La boîte de dialogue Éditer les Connections dialog apparaîtra. Cliquez sur le signal clicked() et sur le slot deleteClipping(). Cliquez OK.
Nous avons créé approximativement 99% du code avec Qt Designer. Pour pouvoir compiler et exécuter notre application il faut créer un fichier main.cpp depuis lequel nous appellerons notre formulaire.
La façon la plus simple de créer un fichier source est de cliquer Fichier|Nouveau pour ouvrir la boîte de dialogue 'Nouveau Fichier' , cliquez ensuite sur 'C++ Source' or 'C++ Header' en fonction des besoins et cliquez sur OK. Une nouvelle fenêtre de source apparaîtra. Cliquez Fichier|Enregistrer sous pour obtenir la boite de dialogue enregistrer sous , entrer 'main.cpp', et cliquez Sauver.
Tapez le code suivant dans la fenêtre d'édition du main.cpp :
#include <qapplication.h> #include "/home/designer/multiclip/.ui/formmulticlip.h" int main( int argc, char *argv[] ) { QApplication app( argc, argv ); FormMultiClip clippingForm; app.setMainWidget( &clippingForm ); clippingForm.show(); return app.exec(); }
Le programme instancie la classe QApplication ainsi que la classe FormMulticlip , définit le formulaire comme composant principal de l'application et le rend visible. L'appel de la méthode exec() de notre application app.exec() déclenche la boucle de traitement des événements.
Démarrez maintenant un terminal (ou xterm), placez vous dans le répertoire qui contient votre projet et tapez qmake. Un fichier Makefile compatible avec votre système va être généré.
qmake -o Makefile multiclip.pro
Vous pouvez désormais compiler votre application en utilisant par exemple make or nmake. Si la compilation se passe bien, vous obtenez un exécutable du nom de multiclip que vous pouvez exécuter. Il y a beaucoup d'améliorations possibles qui vont vous aider à en apprendre plus sur QT et QT Designer.
Ce chapitre était une introduction à la création d'applications multi-plateformes avec Qt Designer. Nous avons créé un formulaire puis y avons placé des composants, les avons mis en page. Nous avons utilisé le mécanisme signal/slot, avons tapé notre code puis avons compilé notre application. Les chapitres suivants vous présenteront davantage d'exemples sur l'utilisation de Qt Designer.