[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Officiels
> Programmation
> Apprenez à programmer en C++ ! > [Pratique] Créez vos propres fenêtres avec Qt > Introduction à Qt
> Lecture du tutoriel
Introduction à Qt
Les amis, le temps n'est plus aux bavardages mais au
concret !
Vous trouverez difficilement plus concret que cette partie II du cours
Pour bien pouvoir comprendre cette partie, il est
vital que vous ayez lu et compris la plupart de la partie I.
Si certaines zones de la première partie vous sont encore un peu obscures, n'hésitez pas à y faire un tour à nouveau. Au pire des cas, si vraiment ça ne rentre pas, vous pouvez quand même lire cette partie, vous aurez peut-être un déclic en pratiquant

Nous commencerons dans un premier temps par découvrir ce qu'est Qt concrètement, ce que cette bibliothèque permet de faire, et quelles sont aussi les alternatives qui existent (car il n'y a pas qu'avec Qt qu'on peut créer des fenêtres !).
Nous verrons ensuite comment installer et configurer Qt.
Préparez-vous bien, parce que dès le chapitre suivant on attaque dare-dare !
Voilà une question que vous vous êtes tous déjà posés, j'en suis sûr ! J'en mettrais même ma main à couper (
et j'y tiens à ma main, c'est vous dire
).
Alors alors, c'est comment qu'on programme des fenêtres ?
Douuucement, pas d'impatience. Si vous allez trop vite vous risquez de brûler des étapes et de vous retrouver bloqué après, alors allez-y progressivement et dans l'ordre en écoutant bien tout ce que j'ai à vous dire.
Un mot de vocabulaire à connaître : GUI
Avant d'aller plus loin, je voudrais vous faire apprendre ce petit mot de vocabulaire car je vais le réutiliser tout au long de cette partie
GUI (prononcez "Goui").
C'est l'abréviation de
Graphical User Interface, soit "Interface utilisateur graphique". Ca désigne tout ce qu'on appelle grossièrement "Programme avec des fenêtres".
Pour bien que vous puissiez comparer, voici un programme sans GUI (en console) et un programme GUI :
Programme sans GUI (console)
Programme GUI, ici sous Windows Vista
Les différents moyens de créer des GUI
Chaque système d'exploitation (Windows, Mac OS, Linux...) propose au moins un moyen de créer des fenêtres... le problème, c'est justement que ce moyen n'est en général pas
portable, c'est-à-dire que votre programme créé uniquement pour Windows ne pourra marcher que sous Windows et pas ailleurs.
On a grosso modo 2 types de choix :
- Soit on écrit son application spécialement pour l'OS qu'on veut, mais le programme ne sera pas portable.
- Soit on utilise une bibliothèque qui s'adapte à tous les OS, c'est-à-dire une bibliothèque multi-plateforme.
La deuxième solution est en générale la meilleure car c'est la plus souple. C'est d'ailleurs celle que nous allons choisir pour que personne ne se sente abandonné.
Histoire d'être suffisament complet quand même, je vais dans un premier temps vous parler des bibliothèques propres aux principaux OS pour que vous connaissiez au moins leurs noms.
Ensuite, nous verrons quelles sont les principales bibliothèques multi-plateforme.
Les bibliothèques propres aux OS
Chaque OS propose au moins une bibliothèque qui permet de créer des fenêtres. Le défaut de cette méthode est qu'en général cette bibliothèque ne marche que pour l'OS pour lequel elle a été créée. Ainsi, si vous utilisez la bilbiothèque de Windows, votre programme ne marchera que sous Windows.
- Sous Windows : on dispose de ce qu'on appelle l'API Win32. C'est une bibliothèque utilisable dans tous les langages (C, C++, Java, Python...) qui vous permet de créer des fenêtres sous Windows. Elle est toutefois assez complexe et il faut beaucoup de lignes de code pour arriver à ouvrir ne serait-ce qu'une simple fenêtre

L'API Win32 est un ensemble de fonctions. Ce n'est pas une bibliothèque qui utilise la POO. Pour palier à ce problème, Microsoft a créé une autre bibliothèque appelée MFC. La MFC est une bibliothèque orientée objet qui se contente en fait d'appeler les fonctions de l'API Win32 (on dit que c'est une surcouche).
Ces bibliothèques tendent aujourd'hui à disparaître sous Windows, progressivement remplacée par la bibliothèque .NET qui est multi-plateforme et dont on reparlera donc un peu plus loin.
> Tutoriel API Win32 réalisé par des membres du Site du Zéro
- Sous Mac OS X : la bibliothèque de prédilection s'appelle Cocoa. On l'utilise en général en langage "Objective C". C'est une bibliothèque orientée objet.
- Sous Linux : tous les environnements de bureaux (appelés WM, Windows Managers) reposent sur X, la base des interfaces graphiques de Linux. X propose une bibliothèque appelée Xlib, mais on programme rarement en Xlib sous Linux. On préfère utiliser une bibliothèque plus simple d'utilisation et multi-plateforme comme GTK+ ou Qt.
Comme vous le voyez, il y a en gros une bibliothèque "de base" pour chaque OS.
L'API Win32 et la Xlib proposent des fonctions de bas niveau. Il faut en général beaucoup de lignes de code avant d'avoir un rendu correct.
Quant à Cocoa, c'est une bibliothèque orientée objet qu'on ne peut utiliser que dans un langage orienté objet (traditionnellement Objective C, mais aussi Java, Python, Ruby...).
Ces bibliothèques ont le gros défaut de ne marcher que sur le système pour lequel elles ont été conçues et d'être relativement complexes, notamment l'API Win32 et la Xlib. Heureusement, il existe un grand nombre de bibliothèques multi-plateforme qui s'adaptent à tous les OS.
Les bibliothèques multi-plateforme
Les avantages d'utiliser une bibliothèque multi-plateforme sont nombreux. Même si vous voulez créer des programmes pour Windows et que vous n'en avez rien à faire de Linux et Mac OS, oui oui
- Tout d'abord, elles simplifient grandement la création d'une fenêtre. Il faut beaucoup moins de lignes de code pour ouvrir une "simple" fenêtre.
- Ensuite, elles uniformisent le tout, elles forment un ensemble cohérent qui fait qu'il est facile de s'y retrouver. Les noms des fonctions et des classes sont choisis de manière logique de manière à vous aider autant que possible.
- Enfin, elles font abstraction du système d'exploitation mais aussi de la version du système. Cela veut dire que si demain l'API Win32 cesse d'être utilisable sous Windows, votre application continuera à fonctionner car la bibliothèque multi-plateforme s'adaptera aux changements.
Bref, choisir une bibliothèque multi-plateforme, ce n'est pas seulement pour que le programme marche partout, mais aussi pour être sûr qu'il marchera tout le temps et pour avoir un certain confort en programmant.
Voici quelques-unes des principales bibliothèques multi-plateforme à connaître, au moins de nom :
- .NET (prononcez "Dot Net") : c'est en quelque sorte le successeur de l'API Win32. On l'utilise souvent en langage C#, un langage créé par Microsoft qui ressemble à Java (il ressemble plus à Java qu'au C++ d'ailleurs
). On peut néanmoins utiliser .NET dans une multitude d'autres langages dont le C++.
.NET est portable car Microsoft a expliqué son fonctionnement. Ainsi, on peut utiliser un programme écrit en .NET sous Linux avec Mono. Pour le moment néanmoins, .NET est principalement utilisé sous Windows.
- GTK+ : une des plus importantes bibliothèques utilisées sous Linux. Elle est portable, c'est-à-dire utilisable sous Linux, Mac OS et Windows. GTK+ est utilisable en C. Néanmoins, il existe une version C++ appelée GTKmm (on parle de wrapper, ou encore de surcouche).
GTK+ est la bibliothèque de prédilection pour ceux qui écrivent des applications pour Gnome sous Linux, mais elle fonctionne aussi sous KDE.
C'est la bibliothèque utilisée par Firefox par exemple, pour ne citer que lui.
> Tutoriel GTK+ réalisé par des membres du Site du Zéro
- Qt : bon je ne vous la présente pas trop longuement ici car tout ce chapitre est là pour ça

Sachez néanmoins que Qt est très utilisée sous Linux aussi, en particulier sous l'environnement de bureau KDE.
- wxWidgets : une bibliothèque objet très complète elle aussi, comparable en gros à Qt. Sa licence est un peu moins restrictive que celle de Qt (elle vous autorise à créer des programmes propriétaires). Néanmoins, j'ai choisi quand même de vous montrer Qt car cette bibliothèque est plus facile à prendre en main au début. Sachez qu'une fois qu'on l'a prise en main, wxWidgets n'est pas beaucoup plus compliquée que Qt.
wxWidgets est la bibliothèque utilisée pour réaliser le GUI de l'IDE Code::Blocks.
- FLTK : contrairement à toutes les bibliothèques "poids lourd" précédentes, FLTK se veut légère. C'est une petite bibliothèque dédiée uniquement à la création d'interfaces graphiques multi-plateforme.
Comme vous le voyez, j'ai dû faire un choix parmi tout ça
Je sais que certains vont me reprocher le choix de Qt par rapport à wxWidgets. Oui j'ai hésité un temps entre les 2, car ce sont 2 très bonnes bibliothèques, mais Qt a finalement gagné car elle est facile à prendre en main. C'est donc une bibliothèque plus "pédagogique" en quelque sorte
Vous l'avez compris, Qt est une
bibliothèque multi-plateforme pour créer des GUI (programme sous forme de fenêtre).
Qt est écrite en C++ et est faite pour être utilisée à la base en C++, mais il est aujourd'hui possible de l'utiliser dans d'autres langages comme Java, Python, etc.
Plus fort qu'une bibliothèque : un framework
Qt est en fait... bien plus qu'une bibliothèque. C'est un
ensemble de bibliothèques. Le tout est tellement énorme qu'on parle d'ailleurs plutôt de
framework : cela signifie que vous avez à votre disposition un ensemble d'outils pour développer vos programmes plus efficacement.
Qu'on ne s'y trompe pas : Qt est à la base faite pour créer des fenêtres, c'est en quelque sorte sa fonction centrale. Mais ce serait dommage de limiter Qt à ça.
Qt est donc constituée d'un ensemble de bibliothèques, appelées "modules". On peut y trouver entre autres ces fonctionnalités :
- Module GUI : c'est toute la partie création de fenêtres. Nous nous concentrerons surtout sur le module GUI dans ce cours.
- Module OpenGL : Qt peut ouvrir une fenêtre contenant de la 3D gérée par OpenGL.
- Module de dessin : pour tous ceux qui voudraient dessiner dans leur fenêtre (en 2D), le module de dessin est très complet !
- Module réseau : Qt fournit une batterie d'outils pour accéder au réseau, que ce soit pour créer un logiciel de Chat, un client FTP, un client Bittorent, un lecteur de flux RSS...
- Module SVG : possibilité de créer des images et animations vectorielles, à la manière de Flash.
- Module de script : Qt supporte le Javascript (ou ECMAScript), que vous pouvez réutiliser dans vos applications pour ajouter des fonctionnalités, sous forme de plugins par exemple.
- Module XML : pour ceux qui connaissent le XML, c'est un moyen très pratique d'échanger des données avec des fichiers formés à l'aide de balises, un peu comme le XHTML.
- Module SQL : permet un accès aux bases de données (MySQL, Oracle, PostgreSQL...).
Que les choses soient claires : Qt n'est pas gros, Qt est
énorme, et il ne faut pas compter sur un tutoriel pour vous expliquer tout ce qu'il y a à savoir sur Qt. Je vais vous montrer beaucoup de ses possibilités mais on ne pourra jamais tout voir. On se concentrera surtout sur la partie GUI.
Pour ceux qui veulent aller plus loin, il faudra lire la
documentation officielle (uniquement en anglais, comme toutes les documentations pour les programmeurs de toute façon). Cette documentation est très bien faite, elle détaille toutes les fonctionnalités de Qt, même les plus récentes.
Sachez d'ailleurs que j'ai choisi Qt en grande partie parce que sa documentation est très bien faite et facile à utiliser. Vous aurez donc intérêt à vous en servir

Si vous êtes perdu ne vous en faites pas, je vous expliquerai dans un prochain chapitre comment on fait pour "lire" et naviguer dans une telle documentation.
Qt est multiplateforme
Qt est un
framework multiplateforme. Je le sais je me répète, mais c'est important de l'avoir bien compris. Tenez, d'ailleurs voilà un schéma qui illustre le fonctionnement de Qt :
Grâce à cette technique, les fenêtres que vous codez ont un "look" adapté à chaque OS. Vous codez pour Qt, et Qt traduit les instructions pour l'OS. Les utilisateurs de vos programmes n'y verront que du feu et ne sauront pas que vous utilisez Qt (de toute manière ils s'en moquent

).
Voici une démonstration de ce que je viens de vous dire. Vous avez ci-dessous le même programme, donc la même fenêtre créée avec Qt, mais sous différents OS. Vous allez voir que Qt s'adapte à chaque fois :
Sous Windows Vista |
Sous Windows XP |
Sous Linux |
Sous Mac OS X |
Tout ce que vous avez à faire pour produire le même résultat, c'est recompiler votre programme sous chacun de ces OS. Par exemple, vous avez développé votre programme sous Windows, très bien, mais les .exe n'existent pas sous Linux. Il vous suffit simplement de recompiler votre programme sous Linux et c'est bon, vous avez une version Linux !
On est obligé de recompiler pour chacun des OS ?
Oui, ça vous permet de créer des programmes binaires adaptés à chaque OS qui tournent à pleine vitesse.
On ne va toutefois pas se préoccuper de compiler sous chacun des OS maintenant, on va déjà le faire pour votre OS ça sera bien
Pour information, d'autres langages de programmation comme Java et Python ne nécessitent pas de recompilation car le terme "compilation" n'existe pas vraiment sous ces langages. Cela fait que les programmes sont un peu plus lents, mais ils s'adaptent automatiquement partout.
L'avantage du C++ par rapport à ces langages est donc sa rapidité (bien que la différence se sente de moins en moins, sauf pour dans les jeux vidéo qui ont besoin de rapidité et qui sont donc majoritairement codés en C++).
L'histoire de Qt
Bon, ne comptez pas sur moi pour vous faire un historique long et chiant sur Qt, mais je pense qu'un tout petit peu de culture générale ne peut pas vous faire de mal et vous permettra de savoir de quoi vous parlez
Qt est une framework développé par la société
Trolltech, basée à Oslo en Norvège.
Le développement de Qt a commencé en 1991 (ça remonte pas mal donc) et il a été dès le début utilisé par KDE, un des principaux environnements de bureau de Linux.
Qt s'écrit "Qt" et non "QT", donc avec un "t" minuscule (si vous faites l'erreur un fanatique de Qt vous égorgera probablement pour vous le rappeler

)
Qt signifie "Cute" (prononcez "Quioute"), ce qui signifie "Mignonne", parce que les développeurs trouvaient que la lettre Q était jolie dans leur éditeur de texte. Oui je sais, ils sont fous ces programmeurs.
La licence de Qt
Trolltech et le monde du logiciel libre sont très liés.
A l'origine, Qt possédait une licence propriétaire, son code source était fermé.
Heureusement, cela fait longtemps maintenant que Qt propose une double licence :
- Si vous faites un programme libre (dont le code source est diffusé), alors vous pouvez utiliser la version libre de Qt gratuitement.
- Si vous faites un programme propriétaire (dont le code source n'est pas diffusé), vous devez acheter une licence auprès de Trolltech.
La licence de Qt est donc parfaitement adaptée à ceux qui souhaitent écrire des logiciels libres, puisqu'ils peuvent télécharger gratuitement Qt et même son code source s'ils le désirent. Par contre, dès l'instant où vous comptez créer un logiciel propriétaire, il faudra payer. Le
site de Trolltech donne les tarifs (ce n'est pas abordable pour un particulier si c'est ce que vous voulez savoir

).
Nous considèrerons donc que nous allons diffuser le code source de nos programmes. Si vous avez l'intention plus tard de créer des programmes propriétaires, je vous conseille de vous orienter vers la bibliothèque wxWidgets qui vous autorise à faire cela.
Donc,
même si vous avez l'intention de créer des programmes propriétaires plus tard, je vous conseille de suivre ce tutoriel sur Qt qui vous en apprendra beaucoup sur la création de GUI. Il ne vous sera pas difficile ensuite de passer à wxWidgets si vous le désirez.
Qui utilise Qt ?
Une bibliothèque comme Qt a besoin de références, c'est-à-dire d'entreprises célèbres qui l'utilisent, pour montrer son sérieux.
De ce point de vue là, pas de problème. Qt est utilisée par de nombreuses entreprises que vous connaissez sûrement :
Qt est utilisée pour réaliser de nombreux GUI, comme celui d'Adobe Photoshop Elements, de Google Earth ou encore de Skype !
Vous êtes prêts à installer Qt ?
On est parti !
Télécharger Qt
Commencez par télécharger Qt sur le
site de Trolltech.
Dans le tableau, choisissez soit "Qt for Windows: C++", "Qt for Linux/X11: C++" ou "Qt for Mac: C++" en fonction de votre système d'exploitation.
Il y a 3 téléchargements possibles, en fonction de votre OS :
- Windows : si vous avez Windows, passez par là ! Dans la page qui s'affiche, choisissez de préférence le ".exe"contenant mingw (plutôt que le zip), c'est un installeur prêt à l'emploi qui contient tout ce qu'il vous faut.
- Mac : pour ceux qui sont sous Mac OS ! Je vous conseille de prendre le fichier à l'extension .dmg (ex : qt-mac-opensource-4.4.0.dmg). Ce fichier contient un installeur .mpkg qui se charge d'installer tout le framework Qt de la même manière que Windows.
- X11 : si vous êtes sous Linux (vous utilisez donc X pour l'interface graphique), c'est pour vous ! Le plus simple sous Debian et Ubuntu est de passer par la console (plutôt que par le site de Trolltech) et de taper sudo apt-get install libqt4-dev, ça fait tout pour vous

Installation sous Windows
L'installation sous Windows se présente sous la forme d'un assistant d'installation classique.
Je vais vous montrer comment ça se passe pas à pas, ce n'est pas bien compliqué.
La première fenêtre est la suivante :
Rien de particulier à signaler. Cliquez sur Next autant de fois que nécessaire en laissant les options par défaut, jusqu'à arriver à la fenêtre suivante :
Cette fenêtre vous demande si vous voulez installer MinGW, le compilateur. Normalement, vous avez déjà installé MinGW en même temps que votre IDE, donc il est déjà sur votre disque.
Toutefois, il faut que vous ayez la bonne version de MinGW avec l'API Win32 pour que Qt puisse faire la traduction correctement. Je vous recommande donc fortement de le réinstaller (ça ne pose aucun problème) dans le répertoire par défaut proposé par l'installeur, ici C:\MinGW.
Lorsque les options sont comme chez moi, cliquez sur Next.
On vous demande alors où télécharger MinGW (sur quel miroir) :
Vous n'avez pas trop le choix, vous ne pouvez télécharger MinGW que chez Trolltech sur leurs serveurs en Norvège

Sélectionnez donc "Trolltech (Norway)", ne cochez pas "Download MinGW source code" (on n'en a pas besoin) et cliquez sur Install.
MinGW se télécharge et s'installe tout seul :
Puis Qt s'installe enfin (il y a beaucoup de fichiers ça peut prendre un peu de temps) :
Vous êtes à la fin ? Ouf !
On vous propose d'ouvrir 2 programmes installés par Qt, ouvrez-les si vous voulez.
Les programmes installés par Qt
En plus de tous les fichiers nécessaires au développement de GUI, Qt installe 4 programmes qui pourront vous être utiles par la suite.
Je vais rapidement vous les présenter mais on ne va pas rentrer dans le détail de chacun d'eux, il est trop tôt.
Qt Examples and Demos
Ca c'est juste une démonstration des possibilités de Qt. Vous pouvez explorer ce programme autant que vous voulez, il est juste là pour présenter Qt.
Qt Assistant
Qt Assistant est la documentation de Qt. Dedans,
il y a tout. Tout ce que vous avez besoin de savoir, toutes les fonctionnalités de Qt, toutes les fonctions, toutes les classes que vous pouvez utiliser.
C'est ce que vous trouverez de plus complet.
Certes, la documentation est en anglais, comme la plupart des documentations pour développeurs. Elle est néanmoins très bien faite, et savoir s'en servir est indispensable si on veut essayer d'autres choses que ce que j'expliquerai dans le tuto. Je vous apprendrai donc à la lire dans un prochain chapitre
Qt Linguist
Qt Linguist est une application à destination des traducteurs. Si votre programme doit être décliné en plusieurs langues, Qt vous offre donc tous les outils dont vous pourriez avoir besoin pour les traduire.
Le gros avantage est qu'il n'y a pas besoin d'être programmeur pour traduire l'application. Il vous suffira de donner un fichier qui contient tout le texte de votre application (généré par Qt), de le donner à traduire à un traducteur avec Qt Linguist, et hop, votre application est multilingue !
Qt Designer
Qt Designer vous permet, vous l'aurez deviné, de créer les fenêtres de vos applications à la souris.
Normalement, une fenêtre se code (on peut créer une fenêtre rien qu'avec du code sans passer par Qt Designer). Qt Designer vous fera gagner du temps... lorsque vous saurez vous servir de Qt. Avant d'utiliser Qt Designer, il faut savoir coder la fenêtre à la main !
Attention Qt Designer est un piège pour les débutants ! Il est très attirant, on pense que ça va être super simple de créer des fenêtres, mais en fait c'est bien plus complexe que cela. Vous ne DEVEZ PAS vous ruer dessus : vous ne pourriez pas vous en servir et l'exploiter correctement.
Je vous expliquerai comment fonctionne Qt Designer, mais ce sera plus tard dans le cours. Il est impératif que vous sachiez d'abord coder une fenêtre à la main, sinon vous ne pourrez pas l'utiliser correctement.
Sous ses apparences simples, Qt Designer est en fait une application complexe qu'on ne peut maîtriser que lorsqu'on a déjà de l'expérience avec Qt. Et cette expérience, on va l'acquérir au fil des chapitres qui suivent
Notion de GUI... OK
Présentation des bibliothèques GUI... OK
Présentation des modules de Qt... OK
Notion de framework multi-plateforme... OK
Culture générale sur Qt... OK
Téléchargement de Qt... OK
Installation de Qt... OK
Présentation des programmes livrés avec Qt... OK
- C'est bon mon commandant, ils sont parés au lancement
- Ouvrez le sas et accrochez-vous lieutenant, ça risque de bouger un peu