Mis à jour le 04/12/2018
  • 50 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

Ce cours existe en livre papier.

Vous pouvez obtenir un certificat de réussite à l'issue de ce cours.

Vous pouvez être accompagné et mentoré par un professeur particulier par visioconférence sur ce cours.

J'ai tout compris !

Initiez-vous à Qt

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Les amis, le temps n'est plus aux bavardages mais au concret !
Vous trouverez difficilement plus concret que cette partie du cours, qui présente la création d'interfaces graphiques (fenêtres) avec la bibliothèque Qt.

Pour bien comprendre cette partie, il est vital que vous ayez lu et compris le début de ce cours.
Si certaines notions de la programmation orientée objet vous sont encore un peu obscures, n'hésitez pas à relire les chapitres correspondants.

Nous commencerons par découvrir ce qu'est Qt concrètement, ce que cette bibliothèque permet de faire et quelles sont ses alternatives.
Nous verrons ensuite comment installer et configurer Qt.

Dis papa, comment on fait des fenêtres ?

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, comment on programme des fenêtres ?

Doucement, pas d'impatience. Si vous allez trop vite, vous risquez de brûler des étapes et de vous retrouver bloqués 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 ». Cela désigne tout ce qu'on appelle grossièrement « Un programme avec des fenêtres ».

Pour que vous puissiez bien comparer, voici un programme sans GUI (figure suivante) et un programme GUI :

Programme sans GUI (console)
Programme sans GUI (console)
Programme avec GUI, ici sous Windows
Programme avec GUI, ici sous Windows

Les différents moyens de créer des GUI

Chaque système d'exploitation (Windows, Mac OS X, 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 fonctionner que sous Windows et pas ailleurs.

On a grosso modo deux 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 multiplateforme.

La seconde solution est en général 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 complet, je vais dans un premier temps vous présenter des bibliothèques propres aux principaux OS, pour que vous connaissiez au moins leurs noms.
Ensuite, nous verrons quelles sont les principales bibliothèques multiplateforme.

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 fonctionne que pour l'OS pour lequel elle a été créée. Ainsi, si vous utilisez la bibliothèque de Windows, votre programme ne marchera que sous Windows.

    • Sous Windows : on dispose du framework .NET. C'est un ensemble très complet de bibliothèques utilisables en C++, C#, Visual Basic… Le langage de prédilection pour travailler avec .NET est C#. Il est à noter que .NET peut aussi être utilisé sous Linux (avec quelques limitations) grâce au projet Mono.

En somme, .NET est un vrai couteau suisse pour développer sous Windows et on peut aussi faire fonctionner les programmes sous Linux, à quelques exceptions près.

  • 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 bureau (appelés WM pour Windows Managers) reposent sur X, la base des interfaces graphiques de Linux. X propose une bibliothèque appelée Xlib mais, sous Linux, on programme rarement en Xlib. On préfère employer une bibliothèque plus simple d'utilisation et multiplateforme comme GTK+ (sous Gnome) ou Qt (sous KDE).

Comme vous le voyez, il y a en gros une bibliothèque « de base » pour chaque OS. Certaines, comme Cocoa, ne fonctionnent que pour le système d'exploitation pour lequel elles ont été prévues. Il est généralement conseillé d'utiliser une bibliothèque multiplateforme si vous comptez distribuer votre programme à un grand nombre de personnes.

Les bibliothèques multiplateforme

Les avantages d'utiliser une bibliothèque multiplateforme 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 généralement beaucoup moins de lignes de code pour ouvrir une « simple » fenêtre.

  • Ensuite, elles uniformisent le tout, elles forment un ensemble cohérent dans lequel il est facile de s'y retrouver. Les noms des fonctions et des classes sont choisis de façon 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 Cocoa cesse d'être utilisable sous Mac OS X, votre application continuera à fonctionner car la bibliothèque multiplateforme s'adaptera aux changements.

Bref, choisir une bibliothèque multiplateforme, 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 multiplateforme à connaître, au moins de nom :

    • .NET (prononcez « Dot Net ») : développé par Microsoft pour succéder à la vieillissante API Win32. On l'utilise souvent en langage C#. 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 X et Windows. GTK+ est utilisable en C mais il en 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 exemple par Firefox, pour ne citer que lui.

    • Qt : bon, je ne vous la présente pas trop longuement ici car tout ce chapitre est là pour cela.

Sachez néanmoins que Qt est très utilisée sous Linux aussi, en particulier dans l'environnement de bureau KDE.

    • wxWidgets : une bibliothèque objet très complète elle aussi, comparable en gros à Qt. Sa licence est très semblable à celle de Qt (elle vous autorise à créer des programmes propriétaires). Néanmoins, j'ai quand même choisi de vous montrer Qt car cette bibliothèque est plus facile pour la formation des débutants. 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 la GUI de l'IDE Code::Blocks.

  • FLTK : contrairement à toutes les bibliothèques « poids lourds » 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 multiplateforme.

Comme vous le voyez, j'ai dû faire un choix parmi tout cela.
C'est la qualité de la bibliothèque Qt et de sa documentation qui m'a convaincu de vous la présenter.

Présentation de Qt

Vous l'avez compris, Qt est une bibliothèque multiplateforme pour créer des GUI (programme utilisant des fenêtres).
Qt est écrite en C++ et elle est, à la base, conçue pour être utilisée en C++. Toutefois, il est aujourd'hui possible de l'utiliser avec d'autres langages comme Java, Python, etc.

Plus fort qu'une bibliothèque : un framework

Qt (voir logo en figure suivante) 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.

Logo de Qt
Logo de Qt

Qu'on ne s'y trompe pas : Qt est fondamentalement conçue pour créer des fenêtres, c'est en quelque sorte sa fonction centrale. Mais ce serait dommage de la limiter à cela.

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, dans ce cours, sur le module GUI.

  • 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 : Qt permet de créer des images et animations vectorielles, à la manière de Flash.

  • Module de script : Qt prend en charge le Javascript (ou ECMAScript), que vous pouvez réutiliser dans vos applications pour ajouter des fonctionnalités, par exemple sous forme de plugins.

  • Module XML : pour ceux qui connaissent le XML, c'est un moyen très pratique d'échanger des données à partir de fichiers structurés à l'aide de balises, comme le XHTML.

  • Module SQL : permet d'accéder 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 seul livre pour vous expliquer tout ce qu'il y a à savoir sur Qt. Je vais vous montrer un large éventail de ses possibilités mais nous ne pourrons jamais tout voir. Nous nous concentrerons 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). 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 perdus, ne vous en faites pas, je vous expliquerai dans un prochain chapitre comment on peut « lire » une telle documentation et naviguer dedans.

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. Le schéma de la figure suivante illustre le fonctionnement de Qt.

Abstraction offerte par Qt
Abstraction offerte par Qt

Grâce à cette technique, les fenêtres que vous codez ont une apparence adaptée à 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. Les figures suivante, suivante, suivante et suivante représentent 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.

Programme Qt sous Windows 7
Programme Qt sous Windows XP
Programme Qt sous Linux
Programme Qt sous Mac OS X
Programme Qt sous Mac OS X

Tout ce que vous avez à faire pour parvenir au 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.exen'existent pas sous Linux. Il vous suffit donc 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, cela vous permet de créer des programmes binaires adaptés à chaque OS et qui tournent à pleine vitesse.
On ne se préoccupera toutefois pas de compiler sous chacun des OS maintenant, on va déjà le faire pour votre OS et ce sera bien. ;)

L'histoire de Qt

Bon, ne comptez pas sur moi pour vous faire un historique long et ennuyeux 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 un framework initialement développé par la société Trolltech, qui fut par la suite rachetée par Nokia.
Le développement de Qt a commencé en 1991 (cela date donc de quelques années) et il a été dès le début utilisé par KDE, un des principaux environnements de bureau sous 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

Qt est distribué sous deux licences, au choix : LGPL ou propriétaire. Celle qui nous intéresse est la licence LGPL car elle nous permet d'utiliser gratuitement Qt (et même d'avoir accès à son code source si on veut !). On peut aussi bien réaliser des programmes libres, c'est-à-dire des programmes dont le code source est public et dont on autorise la modification par d'autres personnes, que des programmes propriétaires.

Bref, c'est vraiment l'idéal pour nous. On peut l'utiliser gratuitement et en faire usage dans des programmes libres comme dans des programmes propriétaires.

Qui utilise Qt ?

Pour témoigner de son sérieux, une bibliothèque comme Qt a besoin de références, c'est-à-dire d'entreprises célèbres qui l'utilisent.
De ce point de vue, pas de problème : Qt est utilisée par de nombreuses entreprises que vous connaissez sûrement : Adobe, Archos, Boeing, Google, Skype, la NASA…

Qt est utilisée pour réaliser de nombreuses GUI, comme celle d'Adobe Photoshop Elements, de Google Earth ou encore de Skype !

Installation de Qt

Vous êtes prêts à installer Qt ?
On est parti !

Télécharger Qt

Commencez par télécharger Qt sur son site web.

Il y a beaucoup de liens de téléchargement. Pas de panique : prenez la version la plus récente que vous voyez et choisissez le "Online installer" correspondant à votre système d'exploitation.

Page de téléchargement de Qt
Page de téléchargement de Qt

Si vous êtes sous Windows et que vous avez une version 64 bits, prenez la version 32 bits elle marchera aussi bien (il n'y a pas d'online installer 64 bits en fait). Si vous ne savez pas ce que ça veut dire, prenez juste le "Qt Online Installer for Windows 32-bit" et ne discutez pas. :p

Une fois que vous aurez le programme, lancez-le. C'est un assistant d'installation qui va télécharger de nouveaux fichiers avant de les installer (oui, ça prend du temps car Qt est gros, très gros).

Installation sous Windows

L'installation sous Windows se présente sous la forme d'un assistant d'installation classique qui télécharge de nouveaux fichiers avant de les installer.

La première fenêtre est représentée sur la figure suivante :

Début de l'installation de Qt
Début de l'installation de Qt

Pas grand chose d'excitant. Avancez, on va ensuite vous demander le répertoire d'installation. Laissez de préférence celui qui est proposé par défaut.

Choix du répertoire d'installation
Choix du répertoire d'installation

On vous demande ensuite quoi installer (quels composants). Laissez les valeurs par défaut ça ira très bien pour nous.

Choix des composants à installer
Choix des composants à installer

S'ensuivent les traditionnelles licences logicielles à accepter. Rien de très compliqué là-dedans mais il faut le faire, car Qt utilise plusieurs licences open source.

Validation des licences logicielles
Validation des licences logicielles

Plus étonnant, on vous demande où mettre des raccourcis dans le menu Démarrer (j'avais perdu l'habitude qu'on me demande ça !).

Insertion dans le menu Démarrer
Insertion dans le menu Démarrer

Après ça, c'est bon. Vous pouvez lancer l'installation ! Elle prend du temps car Qt doit télécharger et installer beaucoup de fichiers.

Téléchargement des fichiers... puis installation
Téléchargement des fichiers... puis installation

Qt Creator

Bien qu'il soit possible de développer en C++ avec Qt en utilisant notre IDE (comme Code::Blocks) je vous recommande fortement d'utiliser l'IDE Qt Creator que nous venons d'installer. Il est particulièrement optimisé pour développer avec Qt. En effet, c'est un programme tout-en-un qui comprend entre autres :

  • un IDE pour développer en C++, optimisé pour compiler des projets utilisant Qt (pas de configuration fastidieuse) ;

  • un éditeur de fenêtres, qui permet de dessiner facilement le contenu des interfaces à la souris ;

  • une documentation in-dis-pen-sable pour tout savoir sur Qt.

Voici à quoi ressemble Qt Creator lorsque vous le lancez pour la première fois :

Qt Creator
Qt Creator

Comme vous le voyez, c'est un outil très propre et très bien fait. Avant que Qt Creator n'apparaisse, il fallait réaliser des configurations parfois complexes pour compiler des projets utilisant Qt. Désormais, tout est transparent pour le développeur !

Dans le prochain chapitre, nous découvrirons comment utiliser Qt Creator pour développer notre premier projet Qt. Nous y compilerons notre toute première fenêtre !

En résumé

  • Il existe deux types de programmes : les programmes console (ceux que nous avons créés jusqu'ici) et les programmes GUI (Graphical User Interface), qui correspondent aux fenêtres que vous connaissez.

  • Créer des programmes GUI est plus complexe que de créer des programmes console.

  • Pour créer des programmes GUI, on doit utiliser une bibliothèque spécialisée comme Qt.

  • Qt est en fait bien plus qu'une bibliothèque : c'est un framework, qui contient un module GUI (celui que nous allons utiliser), un module réseau, un module SQL, etc.

  • Qt est multiplateforme : on peut l'utiliser aussi bien sous Windows que Linux et Mac OS X.

Exemple de certificat de réussite
Exemple de certificat de réussite