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 ?
Il y a en fait 2 moyens d'accéder à la doc :
- si vous avez internet : vous pouvez aller sur le site de Trolltech (l'entreprise qui édite Qt) ;
- si vous n'avez pas internet : vous pouvez utiliser le programme Qt Assistant qui contient toute 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 :
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 :
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 :
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 :
Qt Assistant se présente sous la forme d'un mini-navigateur qui contient la documentation de Qt :
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.
Lorsque vous arrivez à l'accueil de la doc, la page suivante s'affiche comme nous l'avons vu :
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 :
- What's new in Qt 4.x : qu'est-ce qu'il y a de nouveau dans votre version de Qt par rapport aux précédentes ? Cette page intéressera surtout ceux qui connaissent Qt depuis quelques temps et qui sont curieux de voir ce qui a été ajouté depuis les versions précédentes. Je vous conseille d'y jeter un oeil, c'est plutôt bien illustré et clair et ça vous donne une idée des fonctionnalités sur lesquelles Trolltech travaille.
- How to Learn Qt : comment apprendre Qt ? Cette page vous donnera une série de conseils pour apprendre Qt dans les meilleures conditions. On vous conseillera notamment de suivre un tutoriel (ils ne parlent pas des tutoriels du SdZ hélas
).
- Installation : comment installer Qt. A ce stade du cours vous devriez déjà l'avoir fait, donc ça ne devrait pas vous avoir posé de problème.
- Tutorial and Examples : le tutoriel officiel de Qt et une série de programmes d'exemple avec leur code source. C'est une section TRES intéressante, je vous recommande d'y jeter un oeil. J'ai moi-même débuté avec Qt grâce à leur tutoriel qui est bien fait. Ce tutoriel permet en revanche seulement de démarrer et n'ira pas autant dans le détail que le tutoriel du Site du Zéro. Lorsque vous serez un peu plus expérimentés, je vous recommande de regarder les programmes d'exemple aussi, à partir d'un moment on apprend beaucoup mieux en lisant le code source des programmes

- Porting from Qt 3 and Qt 4 : quels sont les changements majeurs entre Qt 3 et Qt 4 ? Il s'agit de 2 "grandes" versions de Qt très différentes. Cette section n'est destinée qu'aux anciens développeurs qui utilisaient Qt 3 et qui veulent passer à Qt 4. A priori, elle ne vous concerne donc absolument pas. Allez zou, on passe !
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 :
- All Classes : affiche TOUTES les classes de Qt, triées par ordre alphabétique. Notez que comme toutes les classes de Qt commencent par la lettre Q, on considère que c'est la seconde lettre qui détermine l'ordre alphabétique. Ainsi, QWidget se trouvera dans la section de la lettre "W".
- Main Classes : c'est une version épurée de "All Classes" qui ne contient que les classes les plus fréquemment utilisées. Je vous conseille de commencer par cette section, amplement suffisante dans un premier temps. Inutile de vous assommer directement avec la liste de toutes les classes

- Grouped Classes : ici, les classes sont groupées par thèmes. C'est une section TRES intéressante pour vous qui débutez. Justement, si vous recherchez une classe dont vous ne connaissez pas le nom, c'est là qu'il faut aller.
- Annotated Classes : contient toutes les classes (comme All Classes) mais avec une courte description devant chacune d'elles. C'est pratique pour retrouver une classe, mais pas autant que la section "Grouped Classes" dont je viens de vous parler

- Qt Classes by Module : les classes sont triées suivant les grands modules de Qt. Comme je vous l'avais dit, nous nous intéresserons surtout au plus gros module dédié à la création d'interfaces graphiques, à savoir QtGui.
- Inheritance Hierarchy : hiérarchie des classes sous forme de liste à puces. On peut voir qui hérite de qui, qui est le "parent" de qui. Ce n'est pas très exploitable à mon avis, je vous conseille de voir le "Class Chart" (plus bas).
- All Functions : liste toutes les fonctions (méthodes) utilisées par toutes les classes de Qt. A utiliser si vous vous souvenez du nom d'une fonction mais pas du nom de la classe.
- Qtopia Core : documentation de la version "light" de Qt destinée aux appareils mobiles (téléphones portables par exemple). Ca ne nous intéresse pas ici.
- All Overviews and HOWTOs : liste de tous les articles de la doc de Qt. Il y a beaucoup de choses dedans et c'est un peu fouilli et inexploitable si vous voulez mon avis, vous pouvez accéder à ces articles par d'autres moyens plus "logiques" depuis l'accueil de la doc.
- Qt Widget Gallery : une galerie des principaux widgets de Qt. Vous pouvez comparer l'apparence des widgets en fonction des systèmes d'exploitation. Si vous cliquez par exemple sur "Windows Vista Style Widget Gallery", vous aurez un très bon aperçu de la plupart des widgets que Qt propose (avec des captures d'écran faites sous Vista). Je vous rappelle que tous ces widgets fonctionnent sur tous les autres OS, c'est juste l'apparence qui change à chaque fois.
- Class Chart : un diagramme de toutes les classes de Qt qui permet de voir la relation d'héritage entre chacune des classes. Ce diagramme (au format PDF) fait peur au premier abord, mais il est en fait vraiment intéressant. Vous voyez qui hérite de qui. Vous constatez par exemple comme je vous l'ai dit que la plupart des classes héritent directement ou indirectement de QObject.
Par exemple, on voit que QPushButton hérite des propriétés de QAbstractButton, qui hérite de QWidget, qui hérite de QObject ! Ah les joies du C++ 
Je vous aurais bien conseillé de l'imprimer et de l'afficher dans votre chambre, mais c'est un peu trop gros pour être imprimé sur une feuille A4. Quoi qu'il en soit, ça peut être intéressant pour se repérer parmi les classes de Qt.
Voici le diagramme des classes au format PNG (au lieu de PDF) pour ceux qui aimeraient y jeter un coup d'oeil :
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 :
- du support
- des formations
- etc.
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 :
- Qt Designer : le logiciel qui permet de dessiner à la souris une interface graphique ;
- Qt Assistant : le logiciel qui contient la documentation dont j'ai parlé au début du chapitre ;
- Qt Linguist : le logiciel qui permet de traduire une application de Qt vers une autre langue ;
- qmake : l'utilitaire indispensable pour compiler une application Qt. Il propose beaucoup d'options et nous n'en avons vu qu'une petite partie pour le moment (la partie essentielle). Vous pourrez en apprendre plus sur la syntaxe des fichiers de projet .pro.
Vous aurez peut-être besoin de lire cette section lorsque vous ferez des programmes un peu plus complexes ;
- All Tools : la liste de tous les outils proposés par Qt (y compris les précédents que je viens de citer).
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
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 :
Vous devriez avoir une longue page qui s'affiche sous vos yeux ébahis, et qui commence par quelque chose comme ça :
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 !
Au tout début, vous pouvez lire une très courte introduction qui explique en quelques mots à quoi sert la classe.
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++
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...
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)
.
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 ?

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 :
- propriete() : c'est la méthode accesseur qui vous permet de lire la propriété ;
- setPropriete() : c'est la méthode accesseur qui vous permet de modifier la propriété.
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 :
- QString text () const
- void setText ( const QString & )
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.
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 :
- le (ou les) constructeur(s) de la classe. Très intéressant pour savoir comment créer un objet à partir de cette classe ;
- les accesseurs de la classe (comme text() et setText() qu'on vient de voir), basés sur les attributs ;
- et enfin d'autres méthodes publiques qui ne sont ni des constructeurs ni des accesseurs et qui effectuent diverses opérations sur l'objet. Par exemple : home(), qui ramène le curseur au début du champ de texte.
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 :
- QLineEdit ( QWidget * parent = 0 )
- QLineEdit ( const QString & contents, QWidget * parent = 0 )
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 ?
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 :
- Les énumérations : Qt::Alignment en est une. Les énumérations sont très simples à utiliser, c'est une série de valeurs. Il suffit d'écrire la valeur que l'on veut, comme le donne la documentation de Qt::Alignment, par exemple Qt::AlignCenter. La méthode pourra donc être appelée comme ceci :
Code : C++1 | monChamp.setAlignment(Qt::AlignCenter);
|
- Les classes : parfois, la méthode attend un objet issu d'une classe précise pour travailler. Là c'est un peu plus compliqué : il va falloir créer un objet de cette classe et l'envoyer à la méthode.
Prenons par exemple setValidator, qui attend un pointeur vers un QValidator. La méthode setValidator vous dit qu'elle permet de vérifier si l'utilisateur a rentré un texte valide, ce qui peut être utile si vous voulez vérifier que l'utilisateur a bien rentré un nombre entier et non pas "Bonjour ça va ?" quand vous lui demandez son âge...
Si vous cliquez sur le lien QValidator, on vous emmène vers la page qui explique comment utiliser la classe QValidator. Lisez le texte d'introduction pour comprendre ce que cette classe est censée faire, puis regardez les constructeurs afin de savoir comment créer un objet de type QValidator.
Parfois, comme là, c'est même un peu plus délicat. QValidator est une classe abstraite (c'est ce que vous dit l'intro de sa doc), ce qui signifie qu'on ne peut pas créer d'objet de type QValidator et qu'il faut utiliser une de ses classes filles 
Au tout début, la page de la doc de QValidator vous dit "Inherited by QDoubleValidator, QIntValidator, and QRegExpValidator". Cela signifie que ces classes héritent de QValidator et que vous pouvez les utiliser aussi. En effet, une classe fille est compatible avec la classe mère, comme nous l'avons déjà vu dans le chapitre sur l'héritage.
Nous, nous voulons autoriser uniquement la personne à rentrer un nombre entier, nous allons donc utiliser QIntValidator. Il faut créer un objet de type QIntValidator. Regardez ses constructeurs et choisissez celui qui vous convient.
Au final (ouf !), pour utiliser setValidator, on peut faire comme ceci :
Code : C++1
2 | QValidator *validator = new QIntValidator(0, 150, this);
monChamp.setValidator(validator);
|
... pour s'assurer que la personne ne rentrera qu'un nombre compris entre 0 et 150 ans (ça laisse de la marge
).
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 !
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++
... 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.
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
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