 atelier programmation c avec qt préambule le but de cet atelier est de montrer les facilités apportées à la programmation d une interface graphique utilisateur gui par un toolkit tel que qt code less create more nous dit trolltech la société norvégienne créatrice et distributrice de cet outil trolltech  http wwwtrolltechcom qt   prérequis connaissances  pour suivre l atelier quelques connaissances de la programmation objet quelque soit le langage seraient utiles mais pas absolument indispensables ceux qui souhaiteraient en savoir davantage sur le c peuvent lire un des nombreux livres existant sur le sujet installation  pour exécuter les démonstrations il faut avoir au préalable installé qt 4xx version open source pour linux à partir des sources temps de compilation relativement long ou à partir de paquets rpm voir http wwwtrolltechcom qt  n oubliez pas d ajouter les lignes suivantes path usr local trolltech qt421 bin path export path à votre fichier caché  profile  ou login  ou bashprofile selon votre distrbution afin de pouvoir exécuter les commandes de compilation des programmes de démonstration présentation de l atelier l atelier comportera plusieurs étapes successives de la plus simple à la plus compliquée chacun pourra compiler s il le désire les programmes correspondants et voir le résultat de leur exécution première étape le projet demo1 dans cette première étape on crée une application très simple et on découvre les outils fournis par qt pour gérer les projets le listing du fichier maincpp le projet demo1 de cette première étape comporte un seul fichier maincpp placé dans le répertoire demo1  le nom du projet le nom du répertoire contenant les fichiers du projet le nom du fichier exécutable qui sera créé lors de la compilation listing du fichier maincpp  les numéros de lignes ont été rajoutés pour faciliter les commentaires mais ils ne font pas partie du listing 1 include 2 3 class demowindow public qmainwindow 4 5 public 6 demowindow constructeur 7 qaction exitact 8 qmenu filemenu 9 10 11 demowindow demowindow constructeur 12 13 exitact new qaction tr e xit this 14 exitact setshortcut tr ctrl q 15 exitact setstatustip tr exit the application 16 connect exitact signal triggered this slot close 17 18 filemenu menubar addmenu tr file 19 filemenu addaction exitact 20 21 statusbar showmessage tr ready 22 23 24 25 int main int argc char argv 26 27 qapplication app argc argv 28 demowindow mainwin 29 mainwinshow 30 return appexec 31  commentaires  ligne 1 on incorpore la bibliothèque qtgui à notre projet lignes 3 à 9 déclaration de la classe demowindow dérivée de qmainwindow elle hérite de ce fait de toutes les propriétés de qmainwindow barre de titre barre de menus barre de statut barre d outils etc elle contient uniquement son constructeur un pointeur sur une instance de la classe qaction et et un pointeur sur une instance de la classe qmenu tous les objets instances dont le nom commence par q sont des objets définis par qt et qui se trouvent dans les bibliothèques qt auxquelles on fait appel dans les instructions include lignes 11 à 22 le constructeur de la classe demowindow on crée ligne 13 l objet exitact qui pourra être utilisé dans un menu et une barre d outils ligne 14 on définit ses touches de raccourcis et ligne 15 le message qui apparaîtra dans la ligne de statut lorsque la ligne de menu correspondante sera sélectionnée ou survolée par la souris puis pour que cette qaction soit utilisable on utilise ligne 16 le mécanisme signal slot propre à qt ce mécanisme est décrit en détails dans l assistant de qt le signal triggered est émis par l objet exitact lorsque l utilisateur clique sur la commande exit ou bien s il frappe ctrl q au clavier a la réception de ce signal notre application sait qu il faut l associer à une fonction membre très précise qui est le slot close et l exécution de cette fonction provoquera la fermeture de l application ligne 18 on ajoute le menu file à la barre de menu et ligne 19 on ajoute l action exitact au menu file enfin on termine en affichant le message ready dans la barre de statut ligne 21 lignes 25 à 31 la fonction main tout programme c ou c doit contenir une fonction main c est elle qui est exécutée en premier et elle doit être placée dans le fichier appelé obligatoirement maincpp pour que le compilateur sache la trouver c est la raison pour laquelle le fichier unique de notre projet demo1 s appelle maincpp et non pas demo1cpp par exemple cette fonction contient les quatre lignes de code suivantes ligne 27 création d une instance app de qapplication ligne 28 création d une instance mainwin de notre classe demowindow ligne 29 affichage de mainwin ligne 30 exécution de l instance app avec retour d un code indiquant si tout s est bien passé  fichier de projet et fichier makefile qt fournit l outil qmake qui permet de créer facilement le fichier de projet et le fichier makefile ouvrir une console et se placer dans le répertoire demo1 exécuter la commande qmake project  le fichier de projet demo1pro est créé en fonction des fichiers contenus dans le répertoire du projet examiner le contenu de ce ficher exécuter ensuite la commande qmake  le fichier makefile est créé en fonction des éléments contenus dans demo1pro compilation  exécuter la commande make  le fichier exécutable demo1 est créé exécution  exécuter la commande demo1  l application qui vient d être créée est lancée il s agit de l affichage d une simple fenêtre avec menus et barre de statut qui peut être agrandie réduite mise en icône et bien entendu fermée de diverses façons deuxième étape pour cette deuxième étape on va enrichir notre application en la dotant d un éditeur de textes le listing du fichier maincpp modifié voici ciaprès le listing du fichier maincpp modifié on peut soit modifier le fichier maincpp du répertoire demo1 soit utiliser le fichier se trouvant dans le répertoire demo2 qui contient les modifications include class demowindow public qmainwindow public demowindow constructeur qaction exitact qmenu filemenu qtextedit editeur demo 2 demowindow demowindow constructeur exitact new qaction tr e xit this exitact setshortcut tr ctrl q exitact setstatustip tr exit the application connect exitact signal triggered this slot close filemenu menubar addmenu tr file filemenu addaction exitact editeur new qtextedit demo 2 setcentralwidget editeur demo 2 resize 400 300 demo 2 statusbar showmessage tr ready int main int argc char argv qapplication app argc argv demowindow mainwin mainwinshow return appexec  commentaires  dans la déclaration de la classe demowindow on déclare la variable editeur qui est un pointeur sur un objet qtextedit en ajoutant la ligne qtextedit editeur puis dans le constructeur de demowindow on crée l éditeur en ajoutant la ligne editeur new qtextedit et on lui donne le statut de widget central setcentralwidget editeur enfin pour voir un peu mieux ce que l on fait on impose les dimensions de la fenêtre dimensions qu on pourra modifier comme on veut lors de l exécution resize 400 300  exécution  si vous avez modifié directement le fichier du répertoire demo1 il suffit de l enregistrer et d exécuter make  le fichier de projet demo1pro et le fichier makefile sont inchangés si vous avez choisi d utiliser le répertoire demo2 contenant le fichier déjà modifier il faut exécuter la séquence complète des commandes qmake project qmake make pour créer le fichier de projet demo2pro et le fichier makefile correspondant lancez l exécution de la nouvelle application grace à l ajout de seulement quatre lignes notre application est devenue un éditeur de textes doté des propriétés classiques des éditeurs de textes essayez un click droit de la souris pour voir  troisième étape le projet demo3 les projets demo 1 et 2 ne comportaient qu un seul fichier appelé obligatoirement maincpp pour des projets plus importants il est nécessaire de diviser les listings entre plusieurs fichiers c est ce que nous allons faire dans cette 3ème étape même si la taille du fichier ne le justifie pas les fichiers du projet leur listing et les commentaires le fichier d entête demowindowh ce fichier regroupe les déclarations des classes utilisées dans le projet et les prototypes des fonctions il ne peut en aucun cas contenir le corps des fonctions include class qaction class qmenu class qtextedit class demowindow public qmainwindow public demowindow constructeur qaction exitact qmenu filemenu qtextedit editeur demo 2  commentaires  la classe demowindow étant dérivée de qmainwindow on doit placer dans notre fichier d entête la première instruction include nous déclarons à l avance les classes qaction qmenu et qtextedit afin de pouvoir utiliser des références à des objets de ce type dans notre classe demowindow la déclaration de la classe demowindow est inchangée le fihier source demowindowcpp  include include demowindowh demowindow demowindow constructeur exitact new qaction tr e xit this exitact setshortcut tr ctrl q exitact setstatustip tr exit the application connect exitact signal triggered this slot close filemenu menubar addmenu tr file filemenu addaction exitact editeur new qtextedit demo 2 setcentralwidget editeur demo 2 resize 400 300 demo 2 statusbar showmessage tr ready  commentaires  les deux premières lignes include incorpore la bibliothèque qtgui dans laquelle le compilateur trouvera tout ce qui dépend deqt y compris les classes que nous avons prédéclarées qaction etc include demowindowh incorpore les déclarations contenues dans notre ficher d entête ensuite on trouve le constructeur de demowindow inchangé le ficher source maincpp  include include demowindowh int main int argc char argv qapplication app argc argv demowindow mainwin mainwinshow return appexec  commentaires  les deux premières lignes include incorpore la déclaration de qapplication include demowindowh incorpore les déclarations contenues dans notre ficher d entête ensuite on retrouve le corps de la fonction main inchangé compilation et exécution ouvrir une console et se placer dans le répertoire demo3 exécuter la commande qmake project  le fichier de projet demo3pro est créé en fonction des fichiers contenus dans le répertoire du projet examiner le conteu de demo3pro exécuter ensuite la commande qmake  le fichier makefile est créé en fonction des éléments contenus dans demo3pro exécuter la commande make  le fichier exécutable demo3 est créé exécuter la commande demo3  l application qui vient d être créée est lancée suites possibles on peut envisager de réaliser d autres ateliers pour aller plus loin créer un dialogue avec qt designer et voir comment on peut l utiliser dans notre application utiliser qt linguist pour traduire les textes des menus et des messages etc  programmation  