TP Qt : QtCreator / QtDesigner



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

Modéliser ses fenêtres avec Qt Designer

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

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

Ateliers Python+Qt : Premiers pas : Comment développez ses propres interfaces graphiques sur le RaspberryPi?

Le langage C. Séance n 4

Once the installation is complete, you can delete the temporary Zip files..

Introduction à l héritage en C++

Construire des plug-ins pour SAS Management Console SAS 9.1

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

Déploiement d application Silverlight

BIRT (Business Intelligence and Reporting Tools)

INTRODUCTION AUX TESTS CODES DE L INTERFACE UTILISATEUR

Gestion des certificats en Internet Explorer

FICHIERS ET DOSSIERS

«Manuel Pratique» Gestion budgétaire

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

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

Atelier Le gestionnaire de fichier

Projet De Stijl Plate-forme pour robots mobiles

Environnements de développement (intégrés)

Manuel d utilisation NETexcom

Cahier Technique Liaison Comptabilité Api / Sage ECF

Construction d Interfaces Graphiques

2X ThinClientServer Guide d utilisation

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

Comment Accéder à des Bases de Données MySQL avec Windows lorqu'elles sont sur un Serveur Linux

Google Drive, le cloud de Google

WebParts. Version 1.0

pcon.planner 6 Préparer et présenter une implantation en toute simplicité

Fiche n 14 : Import / Export avec PlanningPME

Conférence Web sur demande de TELUS Guide de référence rapide

Créer et partager des fichiers

et de la feuille de styles.

Manuel d utilisation

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

Rapports d activités et financiers par Internet. Manuel Utilisateur

Tutoriel code::blocks

Création d une connexion VPN dans Windows XP pour accéder au réseau local de l UQO. Document préparé par le Service des technologies de l information

Quelques outils pour le logiciel «Tuxpaint»

Ateliers Python+Qt : Premiers pas : S'installer pour PyQt... en quelques minutes sous Windows!

Tutorial et Guide TeamViewer

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

Installation du transfert de fichier sécurisé sur le serveur orphanet

Fiche Mémo : Options d accessibilité sous Windows et Internet Explorer 5

Exécution de PCCOMPTA à distance sous Terminal Server 2003.

Tutorial Terminal Server sous

Création d un document PublishView

wxwidgets dans un environnement Microsoft Windows

CREER ET ANIMER SON ESPACE DE TRAVAIL COLLABORATIF

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

TD/TP 1 Introduction au SDK d Android

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

FEN FICHE EMPLOIS NUISANCES

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

MANUEL. de l application «CdC Online» pour Windows. Table des matières

Xerox EX Print Server Powered by Fiery pour la Xerox Color J75 Press. Impression

Module.NET 3 Les Assemblys.NET

TP2 : Client d une BDD SqlServer

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Cours Langage C/C++ Programmation modulaire

3 : créer de nouveaux onglets dans Netvibes Cliquer sur le bouton «+» et renommer le nouvel onglet (par exemple Encyclopédies en ligne)

ALCATEL IP1020. Guide de Configuration pour l offre Centrex OpenIP

Guide de l administrateur DOC-OEMCS8-GA-FR-29/09/05

AOLbox. Partage de disque dur Guide d utilisation. Partage de disque dur Guide d utilisation 1

Quelques outils pour le logiciel «Tux Paint»

Installation et compilation de gnurbs sous Windows

Connexion entre une BD FileMaker Pro 10 et ArcGis 10.x sous Windows 7

Support de formation Notebook

SOMMAIRE. Comment se connecter?

Sécurisation de Windows NT 4.0. et Windows 2000

Alfresco Guide Utilisateur

Internet Explorer. Microsoft. Sommaire :

La Clé informatique. Formation Excel XP Aide-mémoire

Procédure de Migration de G.U.N.T.3 KoXo Administrator

Édu-groupe - Version 4.3

TP SIN Programmation sur androïde Support : eclipse

Manuel d utilisation de ndv 4

Les différentes méthodes pour se connecter

Fonctionnement de Windows XP Mode avec Windows Virtual PC

TwinCAT 3 C++ Création de modules C++ sous TwinCAT 3 VERSION : 1.0 / PH

Machine virtuelle Java pour Palm TX

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

Sauvegarde/Restauration

Documentation Annexe sur le PGI :

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

et dépannage de PC Configuration Sophie Lange Guide de formation avec exercices pratiques Préparation à la certification A+

Développement d'applications Web HTML5 L'art et la manière avec Visual Studio 2015 et TFS

Les tablettes et l'extranet Intermixt Mode d'emploi

Au préalable, nous nous plaçons dans l espace au sein duquel nous allons créer notre raccourci vers l ENTG.

Présentation du site internet EcoleDirecte des Familles et Elèves

Comment consolider des données

ndv access point : Utilisation

Les tableaux croisés dynamiques

OUTIL DE TRAVAIL COLLABORATIF

Manuel de saisie du Titre Par Titre Bancaire via

INITIATION A L INFORMATIQUE. MODULE : Initiation à l'environnement Windows XP. Table des matières :

Document d accompagnement pour l utilisation du Cartable en ligne Lycée des Métiers Fernand LÉGER 2013/2014

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

PIC EVAL Dev Board PIC18F97J60

Transcription:

TP Qt : QtCreator / QtDesigner 2014 tv <tvaira@free.fr> - v.1.0 - produit le 5 décembre 2014 Sommaire Environnement de Développement Intégré (EDI) 2 Travail pratique 2 Objectifs................................................ 2 Mise en situation........................................... 2 Créer un projet Qt.......................................... 3 Qt Designer.............................................. 7 Utiliser le code généré........................................ 10 Créer ses propres signaux et slots.................................. 15 Modifier le code généré........................................ 17 Il est fortement conseillé d utiliser la documentation Qt de référence en français (http ://qt.developpez.com/doc/) ou en anglais (http ://qt-project.org/doc/). 1

Environnement de Développement Intégré (EDI) Qt Creator est l environnement de développement intégré dédié à Qt et facilite la gestion d un projet Qt. Son éditeur de texte offre les principales fonctions que sont la coloration syntaxique, le complètement, l indentation, etc... Qt Creator intègre en son sein les outils Qt Designer et Qt Assistant. Il intègre aussi un mode débuggage. Qt Designer est un logiciel qui permet de créer des interfaces graphiques Qt dans un environnement convivial. L utilisateur, par glisser-déposer, place les composants d interface graphique et y règle leurs propriétés facilement. Les fichiers d interface graphique sont formatés en XML et portent l extension.ui. Lors de la compilation, un fichier d interface graphique est converti en classe C++ par l utilitaire uic. Travail pratique Objectifs Les objectifs de ce tp sont : mise en oeuvre de Qt Creator / QtDesigner utilisation de quelques widgets mise en oeuvre du mécanisme signal/slot Mise en situation Dans ce tp, on vous propose de développer votre première application graphique avec QtCreator / QtDesigner. Figure 1 Un sélecteur de nombre TP Qt : QtCreator / QtDesigner 2 / 18 2014 tv <tvaira@free.fr>

Créer un projet Qt Étape 1. Lancer QtCreator et Créer un projet... Étape 2. On va ici choisir de développer une application Qt basée sur des widgets pour un PC (desktop). L assistant va vous guider en 4 étapes pour créer un squelette d application Qt. TP Qt : QtCreator / QtDesigner 3 / 18 2014 tv <tvaira@free.fr>

Étape 3. Donner un nom à votre projet et choisissez un emplacement... Étape 4. Choix de l installation de la cible... L'option shadow build : Qt propose maintenant de séparer le dossier contenant vos sources des dossiers de fabrication (build ). Le (ou les) dossier(s) de fabrication contiennent des chiers qui sont reconstruits à chaque fabrication (chiers objets, chiers issus du moc et de uic, exécutable,...). Ce n'est pas utile ici pour un TP. Étape 5. Donner un nom à votre classe principale et choisissez la classe de base (QMainWindow ou QDialog ou QWidget). Ces informations vont être utilisées par Qt pour générer les squelettes de votre application. Rappels : il y a trois façons possibles pour créer sa propre application GUI avec Qt On hérite d'une classe Qt. Le choix de la classe mère se fera en fonction des besoins. Ici, on va choisir QWidget. TP Qt : QtCreator / QtDesigner 4 / 18 2014 tv <tvaira@free.fr>

Étape 6. Terminer l assistant de création de projet. TP Qt : QtCreator / QtDesigner 5 / 18 2014 tv <tvaira@free.fr>

Étape 7. Fabriquer et tester le squelette. Vous pouvez compiler et lancer l'application directement avec le raccourci clavier Ctrl-R (la petite èche verte). Les autres possibilités sont accessibles dans le menu Compiler. TP Qt : QtCreator / QtDesigner 6 / 18 2014 tv <tvaira@free.fr>

Qt Designer Étape 8. Lancer Qt Designer. Il vous suffit de double-cliquer sur votre form mywidget.ui. Étape 9. Ajouter un Vertical Layout. Renommez-le en mainlayout. TP Qt : QtCreator / QtDesigner 7 / 18 2014 tv <tvaira@free.fr>

Étape 10. Ajouter les deux widgets : un Vertical Slider et un LCD Number. Renommez-les s et lcd. Étape 11. Fabriquer et tester l application. TP Qt : QtCreator / QtDesigner 8 / 18 2014 tv <tvaira@free.fr>

Étape 12. Cliquer sur l onglet Éditeur de signaux et slots. On va ajouter une connexion signal/slot en cliquant sur + puis cliquez et choisissez successivement : l émetteur, le signal, le receveur et le slot Vous pouvez visualiser vos connexions signal/slot avec F4. Étape 13. Fabriquer et tester l application. TP Qt : QtCreator / QtDesigner 9 / 18 2014 tv <tvaira@free.fr>

Question 1. En utilisant seulement Qt Designer, on vous demande de modifier l application pour réaliser un sélecteur de nombre héxadécimal (de 0 à 255). Vous devez modier une propriété de l'objet lcd (QLCDNumber) et une propriété de l'objet s (QSlider). Utiliser le code généré Étape 14. Accéder au code généré par Qt Designer et uic. Le fichier d interface graphique est formaté en XML et porte l extension.ui. En voici un extrait : <?xml version="1.0" encoding="utf-8"?> <ui version="4.0"> <class>mywidget</class> <widget class="qwidget" name="mywidget"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>400</width> <height>300</height> </rect> </property> <property name="windowtitle"> <string>mywidget</string> </property> <widget class="qwidget" name="verticallayoutwidget"> <property name="geometry"> <rect> <x>9</x> <y>9</y> <width>381</width> <height>281</height> </rect> </property> TP Qt : QtCreator / QtDesigner 10 / 18 2014 tv <tvaira@free.fr>

<layout class="qvboxlayout" name="mainlayout"> <item> <widget class="qlcdnumber" name="lcd"> <property name="mode"> <enum>qlcdnumber::hex</enum> </property> <property name="segmentstyle"> <enum>qlcdnumber::filled</enum> </property> </widget> </item> <item> <widget class="qslider" name="s"> <property name="maximum"> <number>255</number> </property> <property name="orientation"> <enum>qt::horizontal</enum> </property> </widget> </item> </layout> </widget> </widget>... Code 1 mywidget.ui Lors de la compilation, le fichier d interface graphique.ui est converti en classe C++ par l utilitaire uic pour produire un fichier.h contenant le code C++. /******************************************************************************** ** Form generated from reading UI file mywidget.ui ** ** Created: Wed Dec 3 15:27:31 2014 ** by: Qt User Interface Compiler version 4.8.1 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/ #ifndef UI_MYWIDGET_H #define UI_MYWIDGET_H #include <QtCore/QVariant> #include <QtGui/QAction> #include <QtGui/QApplication> #include <QtGui/QButtonGroup> #include <QtGui/QHeaderView> #include <QtGui/QLCDNumber> #include <QtGui/QSlider> #include <QtGui/QVBoxLayout> #include <QtGui/QWidget> QT_BEGIN_NAMESPACE TP Qt : QtCreator / QtDesigner 11 / 18 2014 tv <tvaira@free.fr>

class Ui_MyWidget public: QWidget *verticallayoutwidget; QVBoxLayout *mainlayout; QLCDNumber *lcd; QSlider *s; }; void setupui(qwidget *MyWidget) if (MyWidget->objectName().isEmpty()) MyWidget->setObjectName(QString::fromUtf8("MyWidget")); MyWidget->resize(400, 300); verticallayoutwidget = new QWidget(MyWidget); verticallayoutwidget->setobjectname(qstring::fromutf8("verticallayoutwidget")); verticallayoutwidget->setgeometry(qrect(9, 9, 381, 281)); mainlayout = new QVBoxLayout(verticalLayoutWidget); mainlayout->setspacing(6); mainlayout->setcontentsmargins(11, 11, 11, 11); mainlayout->setobjectname(qstring::fromutf8("mainlayout")); mainlayout->setcontentsmargins(0, 0, 0, 0); lcd = new QLCDNumber(verticalLayoutWidget); lcd->setobjectname(qstring::fromutf8("lcd")); lcd->setmode(qlcdnumber::hex); lcd->setsegmentstyle(qlcdnumber::filled); mainlayout->addwidget(lcd); s = new QSlider(verticalLayoutWidget); s->setobjectname(qstring::fromutf8("s")); s->setmaximum(255); s->setorientation(qt::horizontal); mainlayout->addwidget(s); retranslateui(mywidget); QObject::connect(s, SIGNAL(valueChanged(int)), lcd, SLOT(display(int))); QMetaObject::connectSlotsByName(MyWidget); } // setupui void retranslateui(qwidget *MyWidget) MyWidget->setWindowTitle(QApplication::translate("MyWidget", "MyWidget", 0, QApplication::UnicodeUTF8)); } // retranslateui namespace Ui class MyWidget: public Ui_MyWidget }; } // namespace Ui QT_END_NAMESPACE #endif // UI_MYWIDGET_H TP Qt : QtCreator / QtDesigner 12 / 18 2014 tv <tvaira@free.fr>

Étape 15. Accéder aux objets widgets à partir du code source. Le squelette de la classe MyWidget a été généré automatiquement par l assistant de Qt. Celui-ci a intégré la classe UI générée par Qt Designer. #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> namespace Ui class MyWidget; } class MyWidget : public QWidget Q_OBJECT public: explicit MyWidget(QWidget *parent = 0); ~MyWidget(); private: Ui::MyWidget *ui; // un pointeur sur la classe générée par uic et créée avec Qt Designer }; #endif // MYWIDGET_H Code 3 mywidget.h #include "mywidget.h" #include "ui_mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MyWidget) // instancie ma fenêtre ui ui->setupui(this); // initialise ma fenêtre ui } MyWidget::~MyWidget() delete ui; // libère ma fenêtre ui } Code 4 mywidget.cpp Pour accéder aux objets widgets, il suffit donc de passer par l objet ui (qui représente l objet interface graphique) soit : ui->lcd pour accéder au widget lcd de type QLCDNumber ui->s pour accéder au widget s de type QSlider TP Qt : QtCreator / QtDesigner 13 / 18 2014 tv <tvaira@free.fr>

Par exemple, si l on veut modifier le style de segment de l objet lcd, on fera : #include "mywidget.h" #include "ui_mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent), ui(new Ui::MyWidget) ui->setupui(this); } // modifie le style de segment de l objet lcd ui->lcd->setsegmentstyle(qlcdnumber::outline); MyWidget::~MyWidget() delete ui; } Code 5 mywidget.cpp Question 2. Dans le constructeur de la classe MyWidget, initialiser l objet s avec la valeur 255 (0xFF). TP Qt : QtCreator / QtDesigner 14 / 18 2014 tv <tvaira@free.fr>

Créer ses propres signaux et slots Étape 16. Dans Qt Designer, cliquez avec le bouton droit sur votre fenêtre : Cliquez sur Modifier signaux/slots... et ajoutez un slot et un signal Vous pouvez visualiser la nouvelle connexion signal/slot avec F4. Il vous faudra déclarer vos signaux et slots puis dénir vos slots dans la classe MyWidget. TP Qt : QtCreator / QtDesigner 15 / 18 2014 tv <tvaira@free.fr>

Déclaration du signal signal1() et du slot slot1() : #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include "ui_mywidget.h" class MyWidget : public QWidget, public Ui::MyWidget Q_OBJECT public: explicit MyWidget(QWidget *parent = 0); ~MyWidget(); private: signals: void signal1(); public slots: void slot1(); }; #endif // MYWIDGET_H Et déclaration du slot slot1() : #include "mywidget.h" #include <QDebug>... void MyWidget::slot1() qdebug() << "slot1"; }... TP Qt : QtCreator / QtDesigner 16 / 18 2014 tv <tvaira@free.fr>

Modifier le code généré La relation entre la classe Application MyWidget et la classe (G)UI est implémentée par Qt par une agrégation : l application est composée d une GUI (c est le membre ui dans la classe MyWidget). #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> namespace Ui class MyWidget; } class MyWidget : public QWidget Q_OBJECT public: explicit MyWidget(QWidget *parent = 0); ~MyWidget(); private: Ui::MyWidget *ui; // Agrégation (ou composition par pointeur) générée par Qt }; #endif // MYWIDGET_H Code 8 mywidget.h On va modifier cette relation pour mettre en oeuvre un héritage entre la classe Application MyWidget et la classe (G)UI. Pour cela, on va supprimer le membre ui et réaliser un héritage multiple : #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> #include "ui_mywidget.h" // <- accès à la déclaration de Ui::MyWidget class MyWidget : public QWidget, public Ui::MyWidget // <- héritage multiple Q_OBJECT public: explicit MyWidget(QWidget *parent = 0); ~MyWidget(); }; #endif // MYWIDGET_H Code 9 mywidget.h TP Qt : QtCreator / QtDesigner 17 / 18 2014 tv <tvaira@free.fr>

On peut maintenant supprimer toutes les références à ui : #include "mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) setupui(this); } lcd->setsegmentstyle(qlcdnumber::outline); s->setvalue(255); MyWidget::~MyWidget() } Code 10 mywidget.cpp Question 3. Intégrer maintenant dans votre application un QLineEdit qui permet de saisir un nombre manuellement et de le visualiser dans le QLCDNumber (et le QSlider se met aussi à jour). Prévoir aussi le fonctionnement inverse : le nombre sélectionné avec le QSlider doit s afficher dans le QLineEdit. La saisie et l affichage dans le QLineEdit se fera en décimal. Il vous faudra certainement créer vos propres signaux et slots. TP Qt : QtCreator / QtDesigner 18 / 18 2014 tv <tvaira@free.fr>