SI2 - Master ISI - IHM02 octobre 2006 D´ecouverte de Qt : Premiers pas
Afin de nous familiariser avec cette biblioth`eque, nous allons cr´eer une premi`ere application de type “Hello World” : cette application cr´ee et affiche une fenˆetre contenant un message ainsi qu’un bouton permettant de quitter l’application.
1 Hello World primitif
Commen¸cons simplement par une fenˆetre contenant un message :
#include <QApplication> // permet d’utiliser la classe QApplication
#include <QLabel> // permet d’utiliser la classe QLabel // fonction principale
int main( int argc, char **argv) {
// cr´eation d’une instance de la classe QApplication permettant de // prendre en compte les diff´erents arguments -geometry -display ...
// c’est aussi une variable globale accessible sous le nom qApp QApplication app( argc, argv );
// cr´eation d’un QLabel. Le texte affich´e est format´e `a l’aide d’un // sous-ensemble d’HTML (voir $QTDIR/doc/html/qstylesheet.html) QLabel *hello =
new QLabel(‘‘<font color=blue>Hello World !</font>’’,0);
// d´efinition du Widget principale qui va contenir les autres widgets app.setMainWidget(hello);
// modification des propri´et´es du QLabel pour qu’il puisse s’afficher hello->show();
// lancement de la boucle principale (gestion et traitement des // interruptions, ...)
// cette boucle ne se termine que sur l’appel de app.exit() // ou la destruction du widget
return app.exec();
}
2 Comment compiler ?
Nous nous pla¸cons ici sur un syst`eme de type Linux / Unix.
Qtposs`ede un outil de g´en´eration de Makefile qui vous simplifiera la vie, surtout quand le code contient plusieurs fichiers sources ou r´epertoires. Il s’agit de qmake. Lancez tout d’abord la commande qmake -projectdans votre r´epertoire de travail. Quels sont les fichiers cr´e´es ? Observez leur contenu. Lancez ensuite la commandeqmakeafin de g´en´erer leMakefile. Quels sont les fichiers cr´e´es ? Observez leur contenu. Vous pouvez maintenant lancer la compilation par la commandemake.
Par la suite, il sera n´ecessaire de modifier le fichier .pro pour sp´ecifier l’inclusion de bi- blioth`eques externes (OpenGL, ...).
1
3 Comment ex´ ecuter ?
Comme d’habitude :./hello.
Modifier le texte affich´e en “Bienvenue `a Polytech”’ et ajouter le logo correspondant. Aidez- vous pour cela de la page :
$QTDIR/html/qlabel.html
4 Ajout d’un bouton pour quitter l’application
Les classes disponibles sont consultables sur la page$QTDIR/dochtml/classes.html. M´emorisez cette page dans vos signets (bookmarks) !
Cr´e´ez un bouton de typeQPushButtoncomportant le texte “Quitter”. Recompilez et ex´ecutez votre code. Si vous cliquez sur le bouton, que se passe t’il ?
Afin de quitter l’application, il faut sp´ecifier `a votre application que l’action de clic de souris sur le bouton doit d´eclancher un arrˆet de l’application. Pour Qt, les ´ev´enements pouvant intervenir sont consid´er´es comme des signaux (signals). Les objets Qt peuvent poss`eder des slots leur permettant de r´epondre aux ´ev´enements. Toutes les classes Qt h´eritent d’une classe m`ere QObject poss´edant une m´ethode statiqueconnect (ainsi qu’une m´ethode disconnect) permettant de connecter (ou d´econnecter) un signal `a unslot.
Regardez la page$QTDIR/doc/html/qapplication.html`a la rubrique “Public slots”. Pour notre exemple, la classeQApplicationposs`ede unslotquit()permettant de terminer la boucle principale. Ajoutez la ligne suivante apr`es la cr´eation du bouton :
app.connect(&bouton, SIGNAL(clicked()), &app, SLOT(quit()));
Les macrosSIGNAL et SLOT permettent de transformer les signaux et slots en chaˆınes de ca- ract`eres.
Recompilez et ex´ecutez. Y a t-il de nouveaux fichiers cr´e´es ?
Par la suite, on pourra connecter un signal `a plusieurs slots et plusieurs signaux `a unslot.
Il faudra cependant se m´efier de l’ordre de traitement qui n’est pas forc´ement d´ependant de l’ordre des connections.
Essayez de manipuler d’autres widgets de la biblioth`eque.
2