Aller au menu - Aller au contenu

[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 > Apprendre à lire la documentation de Qt > Lecture du tutoriel

Apprendre à lire la documentation de Qt

Avatar
Auteur : M@teo21
Note : 19 / 20 (13 votes)
Visualisations : 26 137

Plus d'informations Plus d'informations
Voilà le chapitre le plus important de toute la partie sur Qt : celui qui va vous apprendre à lire la documentation de Qt.

Pourquoi est-ce que c'est si important de savoir lire la documentation ?


Parce que la documentation, c'est la bible du programmeur. Elle explique toutes les possibilités d'un langage ou d'une bibliothèque.
La documentation de Qt contient la liste des fonctionnalités de Qt. Toute la liste.

La documentation, c'est donc ce qu'il y a de plus complet mais... ça n'a rien à voir avec un tutoriel du Site du Zéro.

Déjà, il faudra vous y faire : la doc n'est disponible qu'en anglais (c'est valable pour Qt et pour la quasi-totalité des autres docs). Il faudra donc faire l'effort de lire de l'anglais, même si vous y êtes allergiques. En programmation, on peut rarement s'en sortir si on ne lit pas un minimum d'anglais technique.

D'autre part, la documentation est construite de manière assez déroutante quand on débute. Il faut être capable de "lire" et naviguer dans une documentation.
C'est précisément ce que ce chapitre va vous apprendre à faire :)
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Où trouver la doc ?

On vous dit que Qt propose une superbe documentation très complète qui vous explique tout son fonctionnement.
Oui, mais où peut-on trouver cette documentation au juste ? o_O

Il y a en fait 2 moyens d'accéder à la doc :



Avec internet : sur le site de Trolltech



Personnellement, si j'ai accès à internet, j'ai tendance à préférer utiliser cette méthode pour lire la documentation. Il suffit d'aller sur le site web de Trolltech, section documentation. L'adresse est simple à retenir :



Je vous conseille très fortement d'ajouter ce site dans vos favoris, et de faire en sorte qu'il soit visible !
Si vous ne faites pas un raccourci visible vers la doc, vous serez moins tentés d'y aller... or le but c'est justement que vous preniez le réflexe d'y aller ;)


Un des principaux avantages à aller chercher la doc sur internet, c'est que l'on est assuré d'avoir la doc la plus à jour. En effet, s'il y a des nouveautés ou des erreurs, on est certain en allant sur le net d'en avoir la dernière version.

Lorsque vous arrivez sur la doc, la page suivante s'affiche :

Versions de Qt


C'est la liste des produits de Trolltech. Dans le lot on trouve Qt bien évidemment, mais aussi Qtopia, une version "light" de Qt pour les appareils mobiles, Qt Jambi, une version de Qt pour le langage Java, etc.

Nous nous intéressons au premier cadre en haut à gauche intitulé Qt.
Vous pouvez voir la liste des différentes versions de Qt, depuis Qt 2.3.

Sélectionnez la version de Qt qui correspond à celle que vous avez installée. Vous pouvez retrouver le numéro de votre version dans le raccourci du menu Démarrer par exemple.
Dans mon cas, j'ai la version 4.3.2, je vais donc ouvrir Qt 4.3 (la version 4.3.2 n'est en général qu'une correction de bugs de la 4.3, c'est un sous-numéro de version).

Voici la page qui devrait s'afficher maintenant :

Accueil de la doc Qt


C'est l'accueil de la doc pour votre version de Qt.

Si vous le voulez, vous pouvez mettre directement cette page en favoris, car tant que vous n'installez pas une nouvelle version de Qt sur votre PC, il est inutile d'aller lire les docs des autres versions.


Nous allons détailler les différentes sections de cette page.
Mais avant... voyons voir comment accéder à la doc quand on n'a pas internet !

Sans internet : avec Qt Assistant



Si vous n'avez pas internet, pas de panique !
Qt a installé toute la documentation sur votre disque dur. Vous pouvez y accéder grâce au programme "Assistant" que vous retrouverez par exemple dans le menu Démarrer :

Ouvrir Qt Assistant


Qt Assistant se présente sous la forme d'un mini-navigateur qui contient la documentation de Qt :

Qt Assistant


Vous ne disposez que de la documentation de Qt correspondant à la version que vous avez installée (c'est logique dans un sens). Si vous voulez lire la documentation d'anciennes versions de Qt (ou de futures versions en cours de développement) il faut obligatoirement aller sur internet.


Le logiciel Qt Assistant vous permet d'ouvrir plusieurs onglets différents en cliquant sur le bouton "+".
Vous pouvez aussi effectuer une recherche grâce au menu à gauche de l'écran et rajouter des pages en favoris.

Les différentes sections de la doc

Lorsque vous arrivez à l'accueil de la doc, la page suivante s'affiche comme nous l'avons vu :

Accueil de la doc Qt


C'est le sommaire de la doc. Il est découpé en plusieurs sections (une par cadre). Que signifient-elles ?
Analysons-les une à une...

Getting Started



Getting Started contient des informations vous permettant de débuter avec Qt. C'est là-dedans que tout débutant devrait commencer par jeter un oeil. On trouve dans cette section :



General



Ici, on trouvera des informations très générales relatives à Qt et Trolltech. Ce sont des pages "à propos" qui ne devraient pas vraiment vous intéresser.

Notez qu'on vous informe de la différence entre la version commerciale de Qt et la version open-source. Pour résumer simplement : seule la version open-source est gratuite, mais elle implique que vous publiiez le code source de votre programme si vous le distribuez au public.

Jetez un oeil aussi à la FAQ (Frequently Asked Questions, les questions fréquemment posées), vous seriez surpris du nombre de petites choses que l'on peut apprendre sur ce genre de pages.


Developer Resources



Cette section un peu technique indique aux développeurs comment participer à Qt (en rapportant des bugs) et propose des articles et des forums pour ceux qui veulent aller plus loin. C'est encore un peu tôt pour vous, nous n'irons pas dans le détail de cette section.


API Reference



Contient la liste des classes de Qt. C'est probablement LA section la plus importante. C'est en passant par là que vous pourrez savoir tout ce que vous voulez sur une classe précise.

C'est en général à ça que sert la doc. Vous connaissez la classe que vous voulez utiliser, mais vous ne savez pas vous en servir complètement. Vous lisez donc son mode d'emploi.

C'est bien beau tout ça, mais si je ne connais pas le nom de la classe que je veux utiliser ? Si je sais par exemple que je veux créer un menu dans ma fenêtre, comment je fais pour retrouver le nom de la classe qui correspond ?


C'est la question que l'on se pose le plus souvent quand on débute. Ce n'est pas toujours facile de retrouver la classe que l'on cherche dans une doc.
Dans ce cas, soit vous faites une "recherche" dans la doc comme on va le voir, soit vous découvrez le nom de la classe dans un tutoriel (mon tutoriel est fait pour ça, il vous montre les classes et vous apprend à les utiliser un peu, mais si vous voulez aller dans le détail il faudra lire la doc).

La section API Reference propose les liens suivants :



Voici le diagramme des classes au format PNG (au lieu de PDF) pour ceux qui aimeraient y jeter un coup d'oeil :

Qt Diagramme des Classes


Ne vous laissez pas impressionner hein, avec un peu de méthode on s'y retrouve tout à fait ;)
Notez que les classes sont colorées d'un fond de couleur différent en fonction du module auquel elles appartiennent. Les classes de QtGui sont colorées en vert clair sur ce schéma. On voit d'un seul coup d'oeil que ce sont les plus nombreuses.

Core Features



Vous trouverez ici des articles sur les plus importantes fonctionnalités de Qt. C'est un peu comme un tutoriel à thèmes.

Par exemple, il y a une section qui explique le fonctionnement des signaux et des slots avec Qt. Je vous ai déjà fait un tuto à ce sujet, mais sachez pour information que quand moi j'ai débuté avec Qt, j'ai lu cet article qui m'a permis de comprendre ce que c'était et comment ça fonctionnait.

A vous de voir si un de ces thèmes vous intéresse plus particulièrement. Par exemple si vous voulez en savoir plus sur la gestion du dessin avec Qt, allez dans "Paint System". Si vous êtes intéressés par l'accessibilité, regardez du côté de "Accessibility". Si vous voulez traduire votre programme en plusieurs langues, la section "Internationalization" vous donnera de précieux conseils.

Key Technologies



C'est un peu comme la section précédente : il s'agit de tutoriels à thèmes.
Ici, vous trouverez notamment un article sur la gestion de la fenêtre principale d'un programme (Main Window Architecture), ou encore sur la programmation Modèle / Vue dont on reparlera dans un prochain chapitre.

On retrouve plus particulièrement une introduction à chacun des principaux modules de Qt, à l'exception de Qt GUI qui fait déjà l'objet d'un tutoriel dans la section "Getting Started".
Si vous voulez démarrer avec le module réseau de Qt par exemple, il faut lire "Network Module". Si vous comptez faire appel à des bases de données depuis votre programme, consultez "SQL Module".

Add-ons & Services



On vous propose ici des services autour de Qt, à savoir :



Bref autant le dire, des choses qui intéressent des entreprises qui ont le moyen de payer pour ça.

On trouvera aussi un lien vers http://qt-apps.org, un site sur lequel vous trouverez des applications réalisées avec Qt ainsi que de nouveaux widgets que vous pouvez librement utiliser dans vos applications.


Tools



Comme vous le savez déjà, Qt est pré-installé avec un certain nombre d'outils que je vous avais présentés.
On trouve ici des tutoriels pour savoir utiliser chacun de ces logiciels :



Licenses & Credits



Voilà une section contenant des informations légales à propos de Qt. Vous y trouverez notamment un exemplaire de la GNU GPL, la licence libre qui vous autorise à utiliser librement et gratuitement Qt à condition que vous fassiez à votre tour un programme libre.

Bref, ce n'est pas une section très lisible par les programmeurs, il faut plutôt réserver ça aux juristes :p

Comprendre la documentation d'une classe

Voilà la section la plus importante et la plus intéressante de ce chapitre : nous allons étudier la documentation d'une classe de Qt au hasard.
Chaque classe possède sa propre page, plus ou moins longue selon la complexité de la classe. Vous pouvez donc retrouver tout ce dont vous avez besoin de savoir sur une classe en lisant une seule page.

Bon, j'ai dit qu'on allait prendre une classe de Qt au hasard. Alors, voyons voir... sur qui ça va tomber... ah ! Je sais :



Lorsque vous connaissez le nom de la classe et que vous voulez lire sa documentation, vous pouvez passer par le lien "All Classes" depuis le sommaire, ou encore taper directement dans votre navigateur http://doc.trolltech.com/nomdelaclasse.html (exemple : http://doc.trolltech.com/qlineedit.html).


Vous devriez avoir une longue page qui s'affiche sous vos yeux ébahis, et qui commence par quelque chose comme ça :

Qt Documentation de classe


Chaque documentation de classe suit exactement la même structure. Vous retrouverez donc les mêmes sections, les mêmes titres, etc.

Analysons à quoi correspond chacune de ces sections ! :)


Introduction



Au tout début, vous pouvez lire une très courte introduction qui explique en quelques mots à quoi sert la classe.

QLineEdit
Ici, nous avons : "The QLineEdit widget is a one-line text editor.", ce qui signifie, si vous avez bien révisé votre anglais, que ce widget est un éditeur de texte sur une ligne, comme le montre la capture d'écran ci-contre.

Le lien "More..." vous amène vers une description plus détaillée de la classe. En général, il s'agit d'un mini-tutoriel pour apprendre à utiliser la classe. Je vous recommande de toujours lire cette introduction quand vous travaillez avec une classe que vous ne connaissiez pas jusqu'alors.
Ca vous fera gagner beaucoup de temps car vous saurez "par où commencer" et "quelles sont les principales méthodes de la classe".

Ensuite, on vous donne le header à inclure pour pouvoir utiliser la classe dans votre code, en l'occurrence il s'agit de :

Code : C++
1
#include <QLineEdit>


Puis, vous avez une information très importante à côté de laquelle on passe souvent : la classe dont hérite votre classe. Ici, on voit que QWidget est le parent de QLineEdit. Donc QLineEdit récupère toutes les propriétés de QWidget. Ca a son importance comme nous allons le voir...


Voilà pour l'intro ! :)
Maintenant, voyons voir les sections qui suivent...


Public Types



Les classes définissent parfois des types de données personnalisés, sous la forme de ce qu'on appelle des énumérations (j'en ai parlé dans mon cours de C pour ceux qui auraient un trou de mémoire !).

Ici, QLineEdit définit l'énumération EchoMode qui propose plusieurs valeurs : Normal, NoEcho, Password, etc.

Une énumération ne s'utilise pas "telle quelle". C'est juste une liste de valeurs, que vous pouvez renvoyer à une méthode spécifique qui en a besoin. Dans le cas de QLineEdit, c'est la méthode setEchoMode(EchoMode) qui en a besoin, car elle n'accepte que des données de type EchoMode..
Pour envoyer la valeur "Password", il faudra écrire : setEchoMode(QLineEdit::Password) .



Properties



Vous avez là toutes les propriétés d'une classe que vous pouvez lire et modifier.

Euh, ce ne sont pas des attributs ça par hasard ? o_O


Si. Mais la doc ne vous affiche que les attributs pour lesquels Qt définit des accesseurs. Il y a de nombreux attributs "internes" à chaque classe que la doc ne vous montre pas car ils ne vous concernent pas.

Toutes les propriétés sont donc des attributs intéressants de la classe que vous pouvez lire et modifier. Comme je vous l'avais dit dans un chapitre précédent, Qt suit cette convention pour le nom des accesseurs :



Prenons par exemple la propriété text. C'est la propriété qui stocke le texte rentré par l'utilisateur dans le champ de texte QLineEdit.

Comme indiqué dans la doc, text est de type QString. Vous devez donc récupérer la valeur dans un QString.
Pour récupérer le texte entré par l'utilisateur dans une variable contenu, on fera donc :

Code : C++
1
2
QLineEdit monChamp("Contenu du champ");
QString contenu = monChamp.text();


Pour modifier le texte présent dans le champ, on écrira :


Code : C++
1
2
QLineEdit monChamp;
monChamp.setText("Entrez votre nom ici");


Vous remarquerez que dans la doc, la propriété text est un lien. Cliquez dessus. Cela vous amènera plus bas sur la même page vers une description de la propriété (que fait-elle ? à quoi sert-elle ?).
On vous y donne aussi le prototype des accesseurs :



Et enfin, parfois vous verrez comme là une mention "See also" (voir aussi) qui vous invite à aller voir d'autres propriétés ou méthodes de la classe qui ont un rapport avec celle que vous êtes en train de lire. Ici, on vous dit que les méthodes insert() et clear() pourraient vous intéresser. En effet, par exemple clear() vide le contenu du champ de texte, c'est donc une méthode intéressante en rapport avec la propriété qu'on était en train de lire.


TRES IMPORTANT : dans la liste des propriétés en haut de la page, notez les mentions "56 properties inherited from QWidget", et "1 property inherited from QObject". Comme QLineEdit hérite de QWidget, qui lui-même hérite de QObject, il possède du coup toutes les propriétés et toutes les méthodes de ses classes parentes !

En clair, les propriétés que vous voyez là ne sont qu'un tout petit bout des possibilités offertes par QLineEdit. Si vous cliquez sur le lien QWidget, on vous amène vers la liste des propriétés de QWidget. Vous disposez aussi de toutes ces propriétés dans un QLineEdit !
Vous pouvez donc utiliser la propriété width (largeur) qui est définie dans QWidget pour modifier la largeur de votre QLineEdit. Toute la puissance de l'héritage est là ! Tous les widgets possèdent donc ces propriétés "de base", ils n'ont plus qu'à définir des propriétés qui leur sont spécifiques.

J'insiste bien dessus car au début je me disais souvent : "Mais pourquoi il y a aussi peu de choses dans cette classe ?". En fait, il ne faut pas s'y fier et toujours regarder les classes parentes dont hérite la classe qui vous intéresse. Tout ce que les classes parentes possèdent, vous y avez accès aussi.


Public Functions



C'est bien souvent la section la plus importante. Vous y trouverez toutes les méthodes publiques (parce que les privées ne vous concernent pas) de la classe. On trouve dans le lot :



Cliquez sur le nom d'une méthode pour en savoir plus sur son rôle et son fonctionnement.


Lire et comprendre le prototype



A chaque fois, il faut que vous lisiez attentivement le prototype de la méthode, c'est très important ! Le prototype à lui seul vous donne une grosse quantité d'informations sur la méthode.

Prenons l'exemple du constructeur. On voit qu'on a 2 prototypes :



Vous noterez que certains paramètres sont facultatifs.
Si vous cliquez sur un de ces constructeurs, par exemple le second, on vous explique la signification de chacun de ces paramètres.

On apprend que parent est un pointeur vers le widget qui "contiendra" notre QLineEdit (par exemple une fenêtre), et que contents est le texte qui doit être écrit dans le QLineEdit par défaut.

Cela veut dire, si on prend en compte que le paramètre parent est facultatif, qu'on peut créer un objet de type QLineEdit de 4 façons différentes :

Code : C++
1
2
3
4
QLineEdit monChamp(); // Appel du premier constructeur
QLineEdit monChamp(fenetre); // Appel du premier constructeur
QLineEdit monChamp("Entrez un texte"); // Appel du second constructeur
QLineEdit monChamp("Entrez un texte", fenetre); // Appel du second constructeur


C'est fou tout ce qu'un prototype peut raconter hein ? :D


Quand la méthode attend un paramètre d'un type que vous ne connaissez pas...



Je viens de voir la méthode setAlignement, mais elle demande un paramètre de type Qt::Alignment. Comment je lui donne ça moi, je connais pas les Qt::Alignment !


Pas de panique. Il vous arrivera très souvent de tomber sur une méthode qui attend un paramètre d'un type qui vous est inconnu. Par exemple, vous n'avez jamais entendu parler de Qt::Alignment. Qu'est-ce que c'est que ce type ?

La solution pour savoir comment envoyer un paramètre de type Qt::Alignment consiste à cliquer dans la doc sur le lien Qt::Alignment (eh oui, ce n'est pas un lien par hasard !).
Ce lien vous amènera vers une page qui vous explique ce qu'est le type Qt::Alignment.

Il peut y avoir 2 types différents :



La morale de l'histoire, c'est qu'il ne faut pas avoir peur d'aller lire la documentation d'une classe dont a besoin la classe sur laquelle vous travaillez, et même des fois là d'aller voir les classes filles.

Ca peut faire un peu peur au début, mais c'est une gymnastique de l'esprit à acquérir. N'hésitez donc pas à sauter de lien en lien dans la doc pour arriver enfin à envoyer à cette $%@#$#% de méthode un objet du type qu'elle attend ! :D

Public Slots



Les slots sont des méthodes comme les autres, à la différence près qu'on peut aussi les connecter à un signal comme on l'a vu dans le chapitre sur les signaux et les slots.
Notez que rien ne vous interdit d'appeler un slot directement, comme si c'était une méthode comme une autre.

Par exemple, le slot undo() annule la dernière opération de l'utilisateur.

Vous pouvez l'appeler comme une bête méthode :

Code : C++
1
monChamp.undo();


... mais la particularité du fait que undo() soit un slot, c'est que vous pouvez aussi le connecter à un autre widget. Par exemple, on peut imaginer un menu Edition / Annuler dont le signal "cliqué" sera connecté au slot "undo" du champ de texte :)

Tous les slots offerts par QLineEdit ne sont pas dans cette liste. Je me permets de vous rappeler une fois de plus qu'il faut penser à regarder les mentions comme "19 public slots inherited from QWidget", qui vous invitent à aller voir les slots de QWidget auxquels vous avez aussi accès.
C'est ainsi que vous découvrez que vous disposez du slot hide() qui permet de masquer votre QLineEdit.


Signals



C'est la liste des signaux que peut envoyer un QLineEdit.
Un signal est un évènement qui s'est produit et que l'on peut connecter à un slot (le slot pouvant appartenir à cet objet ou à un autre).

Par exemple, le signal textChanged() est émis à chaque fois que l'utilisateur modifie le texte à l'intérieur du QLineEdit. Si vous le voulez, vous pouvez connecter ce signal à un slot pour qu'une action soit effectuée à chaque fois que le texte est modifié.

Attention encore une fois à bien regarder les signaux hérités de QWidget et QObject, car ils appartiennent aussi à la classe QLineEdit. Je sais que je suis lourd à force de répéter ça, inutile de me le dire, je le fais exprès pour que ça rentre :p


Protected Functions



Ce sont des méthodes protégées. Elles ne sont ni public, ni private, mais protected.
Comme on l'a vu dans le chapitre sur l'héritage, ce sont des méthodes privées (auxquelles vous ne pouvez pas accéder directement en tant qu'utilisateur de la classe) mais qui seront héritées et donc réutilisables si vous créez une classe basée sur QLineEdit.

Il est très fréquent d'hériter des classes de Qt, on l'a d'ailleurs déjà fait avec QWidget pour créer une fenêtre personnalisée. Si vous héritez de QLineEdit, sachez donc que vous disposerez aussi de ces méthodes.


Additional Inherited Members



Si des éléments hérités n'ont pas été listés jusqu'ici, on les retrouvera dans cette section à la fin.
Par exemple, la classe QLineEdit ne définit pas de méthodes statiques, mais elle en possède quelques-unes héritées de QWidget et QObject.

Je vous rappelle qu'une méthode statique est une méthode qui peut être appelée sans avoir eu à créer d'objet. C'est un peu comme une fonction.

Il n'y a rien de bien intéressant avec QLineEdit, mais sachez par exemple que la classe QString possède de nombreuses méthodes statiques, comme number() qui convertit le nombre donné en une chaîne de caractères de type QString.

Code : C++
1
QString maChaine = QString::number(12);


Une méthode statique s'appelle comme ceci : NomDeLaClasse::nomDeLaMethode() .
On a déjà vu tout ça dans les chapitres précédents, je ne fais ici que des rappels ;)

Ce chapitre était absolument nécessaire car je suis convaincu que vous ne pouvez pas passer à côté de la doc.

Toutes les informations dont vous avez besoin y sont, le tout est d'être capable de les retrouver et de les comprendre. C'est, je l'espère, ce que ce chapitre vous aura aidés à faire. Il s'agissait de faire une sorte de "guide" pour rassurer les débutants qui n'ont jamais vraiment touché à une documentation.

Le concept pour apprendre un langage ou une bibliothèque est donc le suivant :

  1. d'abord on lit des tutoriels qui nous permettent de savoir comment débuter et dans quelle direction chercher ;
  2. et ensuite on consulte la doc pour connaître le détail des fonctions et des classes.

Il n'existe pas de tutoriel qui vous apprendra tout de A à Z sur une bibliothèque comme Qt par exemple. Ca n'aurait pas de sens et ce serait complètement stupide de chercher à faire ça étant donné que cela représenterait un travail énorme qui deviendrait obsolète dès la prochaine mise à jour de Qt.

Le but de mon tutoriel n'est donc pas de "tout vous apprendre" mais de vous apprendre à apprendre. Bien sûr, je ne vous lâche pas dans la nature comme ça : j'ai encore beaucoup de choses à vous expliquer dans ce tutoriel. Mais pensez à lire la doc en parallèle de mes cours, et une fois que aurez fini de lire ma prose, ayez le réflexe de consulter la doc à chaque fois que vous en avez besoin.

C'est un vrai réflexe de programmeur :)
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 18/09/2007 à 17:13:58
Modifié : le 23/10/2008 à 14:17:50
Avancement : 100%
Licence : Copie non autorisée

17 commentaires

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 84 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0454s (0.032s)