Cours Programmation événementielle avec QtCreator


Télécharger Cours Programmation événementielle avec QtCreator

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Présentation de Qt

ENSIIE2 : Option LOA

Jean-Yves Didier

 

1   Survol de Qt

 Qt

2   Les bibliothèques Qt

Le système des méta-objets

Les conteneurs

Les widgets

3   Les outils qt QMake

QtCreator

4   Sources

Qt en bref

 

Qui utilise Qt ?

Parmi les entreprises/gros organismes

•    ESA : modélisation et carte numérique de Mars;

•    Siemens : contrôle de ligne de production;

•    Dreamworks : logiciel de rendu;

•    Walt Disney Animation Studios : logiciel d’animation;

•    Google, Hp, Volvo, Thales, le CEA,

Logiciels notables

•    Maya : modeleur 3D maintenu par AutoDesk;

•    VLC : lecteur multi-média;

•    KDE : environnement de bureau populaire sous Linux;

•    Skype : logiciel de communication.

Le framework Qt

 

Les exécutables

qtcreator environnement de développement intégré; qmake gestion des projets Qt;

linguist internationalisation des applications;

designer prototypage d’interfaces graphiques; moc génération de code associé aux méta-objets; uic génération de code associé aux interfaces graphiques.


Les bibliothèques

QtCore Fonctionnalités communes;

QtGui Composants de l’interface graphique;

QtNetwork Communication réseau;

QtOpenGL Intégration d’OpenGL;

QtSql Utilisation de base de données SQL;

QtXml Manipulation et génération de fichiers XML;

QtSVG Affichage d’images vectorielles au format SVG; QtTest Tests unitaires;

QtScript Scripting d’applications;

QtWebKit Moteur de rendu web webkit;

QtHelp Aide en ligne des applications.

Une première application (1/3)

Etape par étape sous Linux

 

Une première application (2/3)

Etape par étape sous Linux

Le code source (fichier )


Une première application (3/3)

Etape par étape sous Linux

 

1 Survol de Qt

 Qt

2   Les bibliothèques Qt

Le système des méta-objets

Les conteneurs

Les widgets

3   Les outils qt QMake

QtCreator

4   Sources

Une classe pour les gouverner toutes

La classe QObject

•    Classe de base de la hiérarchie d’héritage des classes Qt;

•    Gère des propriétés dynamiques et statiques;

•    Introduit des mécanismes d’introspection;

•    Introduit une hiérarchie compositionnelle (facilite la gestion de la mémoire);

•    Implémente le mécanisme signal-slot.


Propriétés statiques et dynamiques (1/5)

Définition / Utilité

•    Propriété : membre d’une classe auquel on adjoint de manière standardisée des accesseurs. Mécanisme présent en C#, Php, Python, Ruby;

•    Utilité :

I   accès au membre sans faire de conversion de type;

I utilisation dans des éditeurs spécialisés.

•    Deux types de propriétés :

I   Statiques : propriétés connues à la compilation;

I Dynamiques : propriétés affectées lors de l’exécution.

Propriétés statiques et dynamiques (2/5)

 

Propriétés statiques et dynamiques (3/5)

Propriété dynamiques

•    Reposent sur la classe QVariant, sorte de contenant générique pour des valeurs de types différents;

•    Lecture de propriété : property(char*). Retourne un objet de type QVariant contenant la valeur (peut-être invalide si la propriété est inexistante);

•    Ecriture de propriété : setProperty(char*, QVariant&).

Affecte à une propriété nommée une valeur stockée dans un

QVariant. Renvoie true si la propriété est statique, false sinon.

Propriétés statiques et dynamiques (4/5)

Example de déclaration de propriété statique


Propriétés statiques et dynamiques (5/5)

 

Hiérarchie compositionnelle

Relations père-fils entre objets

•    Permet de gérer la mémoire;

•    Proche du patron de conception composite utilisé dans les interfaces graphiques.

Gestion de la hiérarchie

•    parent() : retourne le père courant (QObject*);

•    setParent(QObject*) : affecte un nouveau père.

•    findChild(QString name) : retourne l’enfant avec le nom donné (récursif);

•    findChildren(QString name) : retourne une liste d’enfants avec le nom donné (récursif).

Mécanismes d’introspection

La classe QMetaObject

•    Tout objet de type QObject possède une méthode metaObject() qui retourne un objet de type QMetaObject;

•    Objet spécial généré lors de la compilation par l’utilitaire moc

(moc = Meta Object Compiler);

•    Permet de déterminer :

I le nom de la classe : className(); I les constructeurs : constructor(int) sous la forme de

QMetaMethod;



I les méthodes : method(int) (usuelles, signaux ou slots) sous la forme de QMetaMethod; I les propriétés statiques property(int) sous la forme de

QMetaProperty;

I le méta-objet décrivant la superclasse : superClass().


Gestion des évènements

Le mécanisme signal/slot

•    Système de callbacks déguisé :

I Patron de conception observateur.

•    Signal : appel à une fonction de callback potentielle;

•    Slot : fonction de callback;

•    Connection Signal/slot modifiable dynamiquement;

•    Condition pour en bénéficier : hériter de QObject.

Créer ses propres signaux/slots

 

Créer ses propres signaux/slots

•    Un slot a une implémentation;

•    Un signal n’a pas d’implémentation!

•    Emettre un signal :´

?emit monSignal(param1,param2, );

•    Connecter un signal et un slot : ? connect(objectA, SIGNAL(monSignal(int,int)), objectB, SLOT(monSlot(int,int)));

I Utilisation des macros SLOT et SIGNAL; I objectA et objectB sont de type QObject*;

I les signatures des signaux et des slots doivent correspondre.


Conteneurs Qt (1/4)

Conteneurs Qt (2/4)

Critères de choix du conteneur : regards sur la complexité

 

 

Recherche

Insertion

Insertion

Insertion

 

 

 

par index

 

en tête

en queue

 

 

QLinkedList<T>

O(n)

O(1)

O(1)

O(1)

 

 

QList<T>

O(1)

O(n)

? O(1)

? O(1)

 

 

QVector<T>

O(1)

O(n)

O(n)

? O(1)

 

 

Recherche par clé

Insertion

Moy.

Pire cas

Moy.

Pire cas

QMap<Key,T>

O(log n)

O(log n)

O(log n)

O(log n)

QMultiMap<Key,T>

O(log n)

O(log n)

O(log n)

O(log n)

QHash<Key,T>

? O(1)

O(n)

? O(1)

O(n)

QSet<Key,T>

? O(1)

O(n)

? O(1)

O(n)

                     

Conteneurs Qt (3/4)

Conteneurs Qt (4/4)

 

Les widgets Qt

•    Pas de liste exhaustive ici, juste les principaux;



•    Dérivent d’une classe QWidget qui dérive de QObject ? chacun possède des signaux et des slots!

•    Widgets organisés en hiérarchie : les fenêtres, menus et layout sont les parents d’autres widgets;

•    Pour chaque widget, nous verrons :

I le constructeur; I l’aspect;

I les principaux signaux et slots.

Les widgets Qt

Les widgets Qt

 

Les widgets Qt

Les widgets Qt (1/2)

Les listes

 

Les widgets Qt (2/2)

Les listes

 

Les widgets Qt

 

Les widgets Qt

 

Les widgets Qt (1/2)

Fenêtre principale

 

Les widgets Qt (2/2)

 

Gestion de la disposition (1/2)

Liens entre les classes QWidget et QLayout

•    layout() retourne pour chaque widget la disposition courante;

•    setLayout(QLayout*) permet d’imposer une disposition. S’applique aux enfants du widget;

•    Attention! Il faut détruire la disposition courante avant d’en appliquer une nouvelle;

•    Les enfants du widget sont à ajouter au layout en utilisant la méthode addWidget(QWidget*) de la classe QLayout.

Gestion de la disposition (2/2)

Principaux gestionnaires de disposition Héritent de la classe QLayout :

QHBoxLayout : rangée horizontale;

QVBoxLayout : colonne verticale; QGridLayout : arrangement selon une grille;

QFormLayout : arrangement sur deux colonnes.


1   Survol de Qt

 Qt

2   Les bibliothèques Qt

Le système des méta-objets Les conteneurs Les widgets

3   Les outils qt QMake

QtCreator

4   Sources

QMake

Caractéristiques

• Générateur de projets multi-plateformes :

I génére des makefiles sous Unix;

I génére des projets Visual studio sous Windows; I

•    Se base sur un profil (qmakespec);

•    Utilise un fichier de description textuelle d’un projet;

•    Est une moulinette à utiliser (en principe) une seule fois en début de projet.

QMake


Qt creator

Un IDE pour Qt

•    IDE = Integrated Development Environment;

•    Gère les projets et les chaˆ?nes de compilations avec QMake;

•    Edition du code avec coloration syntaxique, auto-complétion et auto-correction;

•    Permet le débogage en ligne du programme (front-end graphique à GDB);

•    Facilite la conception des interfaces graphiques en mode WYSIWYG.

Qt Creator

Edition d’interface graphique

 

Qt Creator

Edition d’interface graphique

 

ENSIIE 43/44


Qt Creator

Edition d’interface graphique

 

ENSIIE 43/44

Qt Creator

Edition d’interface graphique

1  Widgets et layouts disponibles par glisser/déplacer;

2  Zone d’édition proprement dite;

3  Zone gérant les actions et les connexions signal/slot;

ENSIIE 43/44

Qt Creator

Edition d’interface graphique

1  Widgets et layouts disponibles par glisser/déplacer;

2  Zone d’édition proprement dite;

3  Zone gérant les actions et les connexions signal/slot;

4  Hiérarchie des widgets;

ENSIIE 43/44

Qt Creator

Edition d’interface graphique

1  Widgets et layouts disponibles par glisser/déplacer;

2  Zone d’édition proprement dite;

3  Zone gérant les actions et les connexions signal/slot;

4  Hiérarchie des widgets;

5  Propriétés du widget sélectionné dans la zone d’édition.

ENSIIE 43/44


Sources

Sources

• :

I Site de la communauté, avec code sous licence LGPL, documentation des APIs et tutoriaux;

•    :

I    Site commercial officiel de Qt par Digia.

•    :

I    Site de la communauté francophone avec tutoriaux et documentation en fran¸cais.

ENSIIE 44/44



239