TP Qt : Prise en main



Documents pareils
Modéliser ses fenêtres avec Qt Designer

Warren PAULUS Robin GODEFROID. C++ - Interface Graphique avec Visual Studio 2010

Quelques éléments de compilation en C et makefiles

Modéliser ses fenêtres avec Qt Designer

Introduction au langage C

Introduction à l héritage en C++

Le langage C. Séance n 4

Construction d Interfaces Graphiques

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

Introduction à C++ et à wxwidgets

Programmation système I Les entrées/sorties

Cours 1: Java et les objets

Utilisation de l outil lié à MBKSTR 9

Introduction à Eclipse

Module.NET 3 Les Assemblys.NET

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Cours Langage C/C++ Programmation modulaire

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Installation et compilation de gnurbs sous Windows

L'architecture MVC avec les widgets complexes

BUREAU VIRTUEL. Utilisation de l application sur ipad. Guide utilisateur. Sciences Po Utilisation du bureau virtuel sur ipad 1 / 6

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

Bases de programmation. Cours 5. Structurer les données

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Programmation en C/C++

Arguments d un programme

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

GUIDE D'INSTALLATION DU PGI EBP EN ETABLISSEMENT

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Algorithmique et Programmation, IMA

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

ESPACE COLLABORATIF SHAREPOINT

1. Développement embarqué. André KPOZEHOUE DOMAINES DE COMPETENCES CONNAISSANCES TECHNIQUES

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Modifier les propriétés d'un widget

Ouvrez un compte Hotmail pour communiquer

Tutoriel code::blocks

Compression de Données - Algorithme de Huffman Document de Conception

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

TP1 : Initiation à Java et Eclipse

TP2 : Client d une BDD SqlServer

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

TP, première séquence d exercices.

COMPARAISONDESLANGAGESC, C++, JAVA ET

Guide d installation CLX.PayMaker Office (3PC)

Outils pour la pratique

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

UE Programmation Impérative Licence 2ème Année

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if


Le Bureau Graphique (1/2)

TABLEAU CROISE DYNAMIQUE

Initiation à LabView : Les exemples d applications :

Manuel d utilisation pour la plateforme BeExcellent MANUEL D UTILISATION POUR LA PLATEFORME BEEXCELLENT

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

TBI-DIRECT. Bridgit. Pour le partage de votre bureau. Écrit par : TBI Direct.

MO-Call pour les Ordinateurs. Guide de l utilisateur

Formation. Module WEB 4.1. Support de cours

Programmation C++ (débutant)/instructions for, while et do...while

Transférer une licence AutoCAD monoposte

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

Installation et configuration du logiciel BauBit

IHM2. Eric Lecolinet - Télécom ParisTech 1. Toolkit graphique Qt Dessin interactif. Machines à états.

Fiche aide pour votre messagerie Outlook, thunderbird, Gmail

Convertisseur BBAN/IBAN

SolidWorks edrawings et publications

Découvrez Windows NetMeeting

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Activité 11 : Nuage de points ou diagramme de dispersion

A.P.I. Kuka Manuel de l utilisateur Version 0.0.5

Tutoriaux : Faites vos premiers pas avec Microsoft Visio 2010

RECOPLUS LOGICIEL DE GESTION DES RECOMMANDES NOTICE D UTILISATION DE RECOPLUS RESEAU. N de série

TP1 - Prise en main de l environnement Unix.

Aide à la prise en charge / PEC+ Utilisation dans les logiciels Mélusine Taxi Live

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

EXCEL TUTORIEL 2012/2013

Travaux pratiques Bureau à distance et assistance à distance dans Windows 7

Mise en place d un intranet de travail collaboratif. Guide utilisateur

The Grid 2: Manuel d utilisation

Programmation système en C/C++

Comment sélectionner des sommets, des arêtes et des faces avec Blender?

Introduction à la Programmation Parallèle: MPI

supérieure Vous ne connaissez pas le numéro de version de votre application?

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Stellar Phoenix Outlook PST Repair - Technical 5.0 Guide d'installation

wxwidgets dans un environnement Microsoft Windows

MISE AU POINT FINANCIÈRE GUIDE DE L UTILISATEUR. Le logiciel MISE AU POINT FINANCIÈRE est offert sous licence par EquiSoft.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programmer en JAVA. par Tama

PROCEDURE D INSTALLATION DES LOGICIELS EBP EN ENVIRONNEMENT ESU4

Suite Messerli Gest (gestion de chantier) Prestations (imputations des heures) Procédure d'installation du programme ou d'une mise à jour

Installation et paramétrage de Fedora dans VirtualBox.

COMMANDER A DISTANCE LE ROBOT-PONG ETUDE DE LA TELECOMMANDE (2 nde PARTIE)

SOMMAIRE. 3. Comment Faire? Description détaillée des étapes de configuration en fonction du logiciel de messagerie... 3

Généralités sur le Langage Java et éléments syntaxiques.

ENVOI SIMPLE (SMS)...

Activation de la licence

Accès à distance sécurisé au Parlement (ADSP)

Transcription:

Université de Strasbourg UFR de Mathématiques et d Informatique Département d Informatique Licence 3 d Informatique IHM Année 2009/2010 TP Qt : Prise en main Objectif Le but de ce tp est une prise en main de la librarie Qt, et de ses outils associés, afin de créer des interfaces graphiques. Il est proposé de développer une calculatrice / convertisseur. À tout moment, et avant d appeler à l aide, consulter la documentation de Qt disponible à l adresse suivante : http://doc.trolltech.com/4.4/index.html 1 Fenêtre principale 1.1 Designer Pour créer des widgets, fenêtres ou dialogues Qt met à disposition un logiciel permettant de dessiner les différents éléments de votre interface en se servant des widgets fournis par Qt. Lancer le designer Qt via la commande designer et créer une nouvelle Form de type Fenêtre Principale. Ajouter sur le dialogue des boutons pour avoir une fenêtre qui ressemble à celle de la Figure 1. Dans cette fenêtre, vous devez utiliser les widgets suivants : 18 QPushButton 1. 1 QLineEdit en lecture seule. 1 Menu Fichier contenant un item Paramètres conversion... et un item Quitter avec pour touches de raccourci la combinaison Ctrl+Q. 1 Menu Aide contenant un item À propos... et un autre item À propos de Qt... Les 10 boutons correspondant aux numéros de 0 à 9 et le bouton pour la virgule sont disposés dans un layout grille (QGridLayout). Les boutons des opérateurs et de conversion sont également dans un layout en grille (QGridLayout). Ces deux layouts sont disposés dans une layout horizontal (QHBoxLayout) avec un spacer horizontal les séparant. La fenêtre est dotée d un layout vertical (QVBoxLayout). Un spacer vertical compresse les widgets vers le haut de la fenêtre. Penser à donner un nom (par exemple MainWindow) à la fenêtre dessinée (champ objectname de l objet QMainWindow dans l éditeur de propriétés du designer). 1.2 Utilisation 1.2.1 Implantation de la fenêtre principale Le designer Qt génère des fichiers xml (.ui) qu il faut ensuite traduire en fichiers C++ (des.h). Pour cela, un utilitaire (uic) est fourni par Qt. Cet utilitaire génère un fichier qui porte le nom suivant ui nomfichier.h où nomfichier est le nom du fichier.ui (sans son extension) généré par le designer. Dans ce fichier, une classe C++ est définie qui porte le nom donné au widget principal du fichier (si vous avez nommé votre objet de type QMainWindow MainWindow, cette classe sera MainWindow). Cette classe est utilisée pour construire dans l application la fenêtre. Pour cela, on définit une nouvelle classe qui hérite à la fois de QMainWindow et de la classe générée par uic. Attention cette classe est encapsulée dans un namespace nommé Ui. Il faut donc préfixer son nom de Ui::. Le fichier.h ressemblera à : 1 Une touche de raccourci pour les boutons numériques et les opérateurs peut être utile. 1

Fig. 1 Fenêtre principale #ifndef QONVERTISSEUR H #define QONVERTISSEUR H // Inclure le f ichier contennant la definition de la fenetre #include ui qonvertisseur. h class Qonvertisseur : public QMainWindow, private Ui : : MainWindow { Q OBJECT // Necessaire a QT public : Qonvertisseur (QWidget parent = 0); Qonvertisseur ( ) ; }; #endif Le fichier.cpp correspondant sera : #include qonvertisseur. h Qonvertisseur : : Qonvertisseur (QWidget parent ) : QMainWindow( parent ), Ui : : MainWindow() { setupui ( this ) ; //Permet d i n i t i a l i s e r les widgets //( definie dans Ui : : MainWindow) } Qonvertisseur : : Qonvertisseur () {} Il existe d autres méthodes pour utiliser des widgets construits dans le designer, consulter la documentation de Qt pour plus d informations : http://doc.trolltech.com/4.4/designer-using-a-component.html. 1.2.2 Fonction main Pour pouvoir lancer notre programme, nous avons besoin d une fonction main effectuant quelques initialisations et l ouverture de la fenêtre principale de notre programme (via la fonction show définie dans QMainWindow). Dans un fichier.cpp, définissez cette fonction sur le modèle suivant : #include <QtGui> #include qonvertisseur. h int main( int argc, char argv [ ] ) 2

{ // Necessaire a Qt QApplication app( argc, argv ) ; //Creation et ouverture de la fenetre Qonvertisseur mainwin ; mainwin. show ( ) ; } //Lancement de la boucle principale de // gestion des evenements u tilisateurs return app. exec ( ) ; 1.3 Compilation : qmake Pour compiler un programme Qt, plusieurs outils sont nécessaires : le compilateur g++, mais également certains outils propres à Qt comme uic ou moc 2. Afin de simplifier la compilation, Qt offre l utilitaire qmake qui permet de générer un fichier Makefile à partir d un fichier projet (extension pro). Ces fichiers projet décrivent les fichiers qui composent le programme (fichiers sources,...) et certaines options construction du projet (librairies à inclures, type de projet à générer,...). Pour votre projet, créer un fichier.pro sur le modèle suivant : TEMPLATE = app TARGET = Qonvertisseur QT += core \ gui HEADERS += qonvertisseur.h SOURCES += qonvertisseur.cpp \ main.cpp FORMS += qonvertisseur.ui La variable HEADERS contient la liste 3 des fichiers.h du projet, SOURCES contient la liste des fichiers.cpp du projet et FORMS la liste des fichiers.ui nécessaires à la construction du programme. TARGET définit le nom de l exécutable généré. Pour plus d informations sur les autres variables, consulter la documentation de qmake : http://doc.trolltech.com/4.4/qmake-manual.html Pour compiler le programme, taper la commande : qmake fichier.pro puis make. Tester votre programme. 2 Gestion des événements utilisateurs : mécanisme de signaux/récepteurs Principe de fonctionnement Pour gérer les évenements et les actions entre l utlisateur et le programme ou entre les widgets du programme, Qt utlise un mécanisme très puissant de signaux et de récepteurs (slots). Chaque objet du programme (qui hérite de QObject et qui contient l appel à la macro Q OBJECT dans sa déclaration) peut émettre des signaux. Ces signaux peuvent être captés par d autres objets qui y sont connectés pour le signal donné. Ce mécanisme puissant permet aux différents objets de votre application de communiquer entre-eux de façon simple sans avoir à maintenir en permanence des références entre les différents objets. La contrepartie est qu une étape de précompilation (avant l appel de g++) est nécessaire. Cette étape est effectuée par le programme moc qui, à partir des fichiers.h et.cpp décrivant les classes, va générer un fichier moc *.cpp. qmake détermine automatiquement les fichiers nécessitant une précompilation et crée les règles de compilations adéquates dans le fichier Makefile. Pour plus de détails, je vous encourage vivement 2 Nous verrons son utilité plus tard! 3 Si la liste est sur plusieurs lignes, n oublier pas le \ en fin de ligne (sauf pour la dernière)! 3

à lire la documentation de Qt explicitant ce point : http://doc.trolltech.com/4.4/signalsandslots.html. Mise en œuvre Afin de connecter deux objets entre-eux, vous devez utiliser la fonction statique connect dont le prototype est le suivant : bool QObject : : connect (const QObject sender, const char signal, const QObject receiver, const char method, Qt : : ConnectionType type = Qt : : AutoConnection ) ; où sender et receiver sont deux pointeurs sur les objets à connecter. signal et method sont deux pointeurs représentant respectivement le signal et la fonction réceptrice concernés par cette connexion. La syntaxe de ces chaînes de caractères est un peu particulière et utilise deux macros : Pour le signal : SIGNAL(nomSignal(typeArg1, typearg2,...)) Pour le recepteur : SLOT(nomSlot(typeArg1, typearg2,...)) Attention, le type des arguments du signal et du slot doivent être identiques, sinon la connexion ne pourra être effectuée. Un message d erreur sera normalement généré lors de l exécution. Définition de signaux et de récepteurs Il est possible de définir ses propres signaux et récepteurs dans une classe. Il suffit de définir des méthodes de classe dont la visibilité est signals ou {public protected private} slots : class C { Q OBJECT public : C( ) ; C( ) ; public s l o t s : void f1 ( ) ; private s l o ts : void f2 ( int a, float b ) ; signals : void s1 ( float b ) ; }; Les signaux ne nécessitent pas d implantation (elle est créée dans le fichier générer par moc). À tout moment, une fonction membre d une classe fille de QObject peut emettre un signal en utlisant le mot clé Qt emit : emit s1 (2.0 f ) ; Connexion et designer Il est possible de connecter des widgets directement à partir du designer via deux méthodes : En passant par l éditeur de Signal/Slot. Ou en dessinant directement les connections entre les widgets (mode edition de signal/slot, accessible dans le menu Edition ). Connecter le signal triggered de l item de menu Quitter du menu Fichier avec le slot close de la fenêtre principale de votre application. Recompiler et tester. 3 Application 3.1 Boîtes de dialogue 3.1.1 Boîtes À propos Qt offre des mécanismes pour créer facilement ce type de boîtes de dialogue. 4

Fig. 2 Dialogue des paramètres de conversion Dans votre classe principale (ici Qonvertisseur), créer 2 slots privés associés aux signaux triggered des items de menu Aide À propos de Qt... et Aide À propos... Dans le premier slot, ouvrer la boîte de dialogue À propos de Qt... grace à la fonction statique QApplication::aboutQt. Faire de même avec une boîte de dialogue générer par la fonction statique QMessageBox::about dans le deuxième slot. 3.1.2 Paramètres de conversion Créer un nouveau widget via le designer (de type Dialogue avec boutons en bas ) qui devra ressembler à la capture de la Figure 2 (2 QLabel et 1 QLineEdit). Créer la classe d implémentation associée (qui dérive, cette fois, de la classe QDialog). Cette classe devra contenir une fonction permettant d initialiser et de récupérer la valeur contenue dans la QLineEdit. Penser à vérifier que la valeur saisie et bien un nombre en utilisant, par exemple la fonction tofloat de la classe QString. Créer le slot associé au signal triggered de l item de menu Fichier Paramètres de conversion... Dans ce slot, effectuer les actions suivantes : 1. Créer une boîte de dialogue de Paramètres de conversion. 2. Initialiser sa QLineEdit avec la valeur courante de conversion euro dollar (qui peut être stockée dans une variable membre protégée de la classe Qonvertisseur). 3. Afficher la boîte de dialogue de façon modale (fonction exec définie dans QDialog). 4. Récupérer la valeur de conversion saisie et mettre à jour la variable membre de la classe Qonversion si l utilisateur a cliqué sur Ok. 3.2 Actions sur les boutons Boutons numériques Créer 10 slots pour chaque clique sur un bouton numériques (à connecter au signal clicked de chaque bouton). L action à effectuer dans ces slots est la suivante : récupérer la chaîne de caractère de la QLineEdit et y ajouter à la fin la valeur du bouton. Bouton séparateur décimal Le comportement de ce bouton est similaire aux boutons numériques. Cependant, ce bouton ne doit plus être actif quand un point a été saisi ou quand la valeur affichée dans la QLineEdit contient un point. Il faut donc prévoir un mécanisme qui mémorise si ce bouton a été pressé dans l expression actuelle et le désactiver le cas echéant. Opérations Pour simplifier, on ne gère pas les priorités des opérations. Vous aurez besoin de mémoriser au minimum le premier opérande et l opérateur courant. Attention à la division par 0. Le bouton = permet de calculer et d afficher le résultat. Les conversions utilisent qu un seul opérande et la valeur de conversion saisie dans la boîte de dialogue des Paramètres de conversion et affichent directement le résultat sur la QLineEdit. 5