Dans le cours, nous avons eu largement le temps d'étudier la bibliothèque Qt et de découvrir à quel point il était simple de créer des GUI (fenêtres).
Nous avons aussi découvert que cette bibliothèque était énorme, et qu'on devait plutôt parler de
framework (ensemble de bibliothèques).
Je vous rappelle que Qt est constitué de plusieurs modules :
- GUI
- OpenGL
- Dessin
- Réseau
- SVG
- Scripts
- XML
- SQL
- Core
En ce qui nous concerne, nous avons eu l'occasion de bien faire le tour du module GUI (c'était le but !) et nous nous sommes initiés aussi un peu au réseau.
Malgré cela, nous n'avons pas tout tout vu sur le module GUI. D'autre part, nous avons seulement effleuré le module réseau, et nous n'avons pas du tout parlé des autres modules.
Je vais, dans cette annexe, vous présenter brièvement quelques-uns de ces modules. Je ne vais pas vous les expliquer (ce serait beaucoup trop long !), juste vous en parler pour vous donner quelques pistes.
Surtout, pensez à vous rendre sur
la doc pour en savoir plus !
Module GUI : des petites fonctionnalités cachées
Il y a quelques widgets et fonctionnalités plus rares dont je n'ai pas eu l'occasion de parler. Je vais vous en présenter quelques-uns rapidement ici. Ils ne sont pas toujours utiles mais ça peut être bien de savoir qu'ils existent.
Cette liste des autres fonctionnalités à découvrir n'est pas complète, loin de là. Je ne connais pas tout. Je vous donne juste une idée des "petites choses" que vous pouvez découvrir si vous passez un peu de temps dans la doc.
QCalendarWidget : un calendrier tout prêt
Le widget
QCalendarWidget permet d'afficher un calendrier :
Si vous devez réaliser un agenda ou si l'utilisateur doit sélectionner une date, nul doute que ce widget vous fera gagner un temps fou !
QSplashScreen : pour faire patienter au démarrage
Parfois, certains programmes sont un peu longs à charger. Pour faire patienter l'utilisateur, on affiche un "splash screen", c'est-à-dire une petite image au centre de l'écran. C'est ce que fait Code::Blocks au démarrage par exemple.
Qt permet de créer un "splash screen" avec la classe
QSplashScreen. On l'utilise en général dans le main, juste avant d'ouvrir la fenêtre principale :
Code : C++ 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | #include <QApplication>
#include <QTranslator>
#include <QLocale>
#include <QLibraryInfo>
#include <QSplashScreen>
#include <QPixmap>
#include "FenPrincipale.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QSplashScreen splash(QPixmap("znavigo.png"), Qt::WindowStaysOnTopHint);
splash.show();
// Traduction des chaînes prédéfinies par Qt dans notre langue
QString locale = QLocale::system().name();
QTranslator translator;
translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
app.installTranslator(&translator);
// Ouverture de la fenêtre principale du navigateur
FenPrincipale principale;
principale.show();
return app.exec();
}
|
Le splash screen peut être arrêté en cliquant dessus.
Après, libre à vous de l'arrêter automatiquement au bout d'un certain temps, il faut juste chercher dans la doc comment faire.
Afficher une icône dans le system tray
Pour certaines applications résidentes en mémoire, il peut être utile de placer une icône dans le system tray, oui là à côté de l'horloge vous savez.
Qt permet justement de le faire avec QSystemTrayIcon :
Le mieux pour apprendre à s'en servir est de jeter un oeil à l'
exemple fourni dans la doc de Qt.
Module réseau : utilisez des classes de haut niveau
Dans notre découverte du réseau, nous avons utilisé des QTcpSocket et un QTcpServer. C'est une gestion assez bas niveau des paquets et il nous a fallu apprendre un peu comment le réseau fonctionnait.
On aurait pu parler des paquets UDP aussi, mais on les utilise vraiment dans des cas spécifiques.
En revanche, ce qu'on n'a pas vu, c'est qu'il y a des classes de plus haut niveau qui vous évitent d'avoir à manipuler les paquets TCP directement. Je pense en particulier à :
- QHttp : vous permet d'utiliser le protocole HTTP et donc de télécharger des pages web ou des fichiers via le web.
- QFtp : vous permet de télécharger et d'envoyer des fichiers par FTP. Vous pourriez créer votre propre client FTP comme Filezilla par exemple.

Ces classes sont beaucoup plus faciles à utiliser que celles que nous avons vues, donc n'hésitez pas à y jeter un oeil.
Elles sont brièvement introduites dans la
page d'accueil du module réseau sur la doc de Qt.
Module SQL : accès aux bases de données
Si votre programme doit enregistrer de nombreuses données, il peut être utile de les stocker dans une base de données. C'est un système puissant pour enregistrer des informations, mais il faut connaître le langage SQL pour écrire et lire des informations dedans.
Qt propose tout ce qu'il faut pour se connecter à une base de données dans votre programme, mais il n'inclue pas la base de données... ce sera à vous de l'installer. En clair, si vous utilisez MySQL comme base de données, il faudra d'abord aller installer MySQL sur le
site officiel avant de pouvoir établir une connexion avec dans votre programme.
Une fois que vous avez installé votre système de gestion de base de données sur votre ordinateur, vous pouvez découvrir comment y faire appel depuis Qt. Le mieux est de lire l'
introduction au module QtSql sur la doc. En tout cas c'est ce que je ferais à votre place.
En quelques minutes de lecture de cette seule page, vous devriez déjà savoir vous connecter à la base de données et exécuter des requêtes SQL (mais attention, il faut connaître le langage SQL avant !).
Module XML : pour ceux qui doivent gérer des données au format XML
Le XML est un langage générique qui est à la base de nombreux autres langages, comme XHTML (qui permet de créer des pages web).
Le principe de XML peut être très vite compris si vous avez déjà fait du XHTML avant. En gros, c'est vous qui définissez vos propres balises :
Code : XML | <bibliotheque>
<livre>
<auteur>J.R.R. Tolkien</auteur>
<titre>Le seigneur des anneaux</titre>
</livre>
<livre>
<auteur>R. Barjavel</auteur>
<titre>La nuit des temps</titre>
</livre>
</bibliotheque>
|
Les données sont placées entre des balises que vous définissez. L'avantage du XML est qu'il est facile à lire (enfin, tant que le fichier n'est pas trop gros ou trop complexe).
Vous pouvez vous servir de cette technique pour organiser vos données dans des fichiers sans avoir recours à une base de données. D'autre part, le XML est un format d'échange devenu courant de nos jours, et il est possible que quelqu'un vous "envoie" des données au format XML que vous devrez traiter dans votre programme.
Pour lire le contenu d'un document XML comme celui ci-dessus (et pour écrire du XML aussi), il y a le module QtXml qui permet de faire cela facilement. Il vous faudra acquérir avant un peu de théorie sur le fonctionnement de XML (DOM, SAX, XQuery, DTD, XML Schema...). Il vaut mieux être rôdé sur la théorie de XML avant de s'y lancer sinon vous n'en profiterez pas.
Une fois que vous connaissez un peu mieux le fonctionnement de XML, direction la
page d'accueil du module QtXml pour découvrir les outils que Qt met à votre disposition pour lire et écrire du XML. Il y a de quoi faire, et encore une fois je vous le rappelle, mieux vaut être armé et connaître XML avant de se lancer là-dedans !
Module Core : toutes les fonctionnalités de base de Qt
Le module QtCore contient des classes de base de Qt qui n'ont pas de rapport avec les GUI et qui peuvent donc être utilisées dans un programme purement console.
Dans ce module, on trouve un certain nombre de classes que vous connaissez déjà :
- QString : gestion des chaînes de caractères.
- QByteArray : une suite d'octets (on s'en est servi dans le programme de Chat pour construire des paquets).
- QFile : accès aux fichiers.
- QLocale : permet d'accéder aux habitudes de représentation des nombres et chaînes dans différentes langues.
- QList : une liste capable de stocker un tableau à taille dynamique (cette classe est une version "Qt" de ce qui se fait dans la STL dont je vous ai parlé plus haut).
- QUrl : représente une URL.
Voilà quelques exemples de classes du module QtCore que vous avez déjà utilisées. Comme vous le voyez, ces classes font partie du "coeur" de Qt et pas du module GUI car elles peuvent être réutilisées dans tous les autres modules.
Jetez donc un oeil à la
liste des classes du module QtCore. Il y a de quoi faire, et on retrouve notamment de nombreuses versions "Qt" de classes présentes dans la STL (il y a même un
QVector !).
Bonne pêche !