Module IHM
SICOM, S8
2019 - 2020
1 Présentation
2 Programmation évènementielle
3 Structure générale
4 Les modules
5 Application GUI
6 Élément graphique
7 Mécanisme signal/slot
8 Projet Qt
10 Positionnement deswidgets
12 Documentation
SICOM, S8 Cours Qt 2 / 69
Présentation
Qu’est-ce que Qt ?
Qt est une bibliothèque logicielle orientée objet (API)
développée en C + + par Qt Development Frameworks, filiale de
Digia.
API désigne : Application Programming Interface.
Qu’est-ce que Qt ?
Un langage informatique (ou métalangage pour être plus précis) utilisé, entre
autres, dans la conception des sites Web et pour faciliter les échanges
d'informations sur Internet.
SICOM, S8 Cours Qt 4/ 69
Présentation
Qu’offre Qt ?
Qt permet la portabilité des applications par simple recompilation du
code source.
Les environnements supportés sont les Unix (dont Linux), Windows et
Mac OS X.
SICOM, S8 Cours Qt 5/ 69
Présentation
Que permet Qt ?
Les widgets peuvent être utilisés pour créer ses propres fenêtres et
boîtes de dialogue complètement prédéfinies
(ouverture/enregistrement des fichiers, progression d’opération,
etc).
SICOM, S8 Cours Qt 6/ 69
Programmation évènementielle
SICOM, S8 Cours Qt 7/ 69
Programmation évènementielle
SICOM, S8 Cours Qt 8/ 69
Programmation évènementielle
SICOM, S8 Cours 10 / 69
Structure générale deQt
pu b l i c :
MaClasse( QObject *parent=0 ) : QObject(parent) { }
P ri va t e signals:
void send( int ) ; / / un signal (ne pas définir)
public s l o t s :
void re ce i ve ( int ) ; / / un s l o t ( à définir)
};
Houston ? On a un problème !
Toutes les propriétés sont des attributs de la classe que l’on peut lire
et éventuellement modifier.
● Qt utilise Unicode 4.0 pour la représentation de ses chaînes de caractères, pour ces
modules.
La classe QApplication
Exemple
main.cpp :
#include <QApplication>
#include "ihm.h"
return r e t ;
}
SICOM, S8 Cours Qt 21 / 69
Élément graphique
Le
widget
Avec Qt, les éléments (ou composants) graphiques prédéfinis
sont appelés des widgets (pour windows gadgets).
Les widgets sont les éléments principaux de la création d’interface
graphique utilisateur (GUI) avec Qt.
Les widgets peuvent afficher des données et des informations sur un
état, recevoir des actions de l’utilisateur et agir comme un conteneur
pour d’autres widgets qui doivent être regroupés.
La classe QWidget
Exemple
#include <QApplication>
#include <QWidget>
Un widget qui n’est pas intégré dans un widget parent est appelé une
fenêtre.
Les widgets
prédéfinis
Qt fournit des widgets prédéfinis permettant de composer ses propres
applications graphiques :
Les widgets
prédéfinis
SICOM, S8 Cours Qt 27 / 69
Élément graphique
SICOM, S8 Cours Qt 28 / 69
Élément graphique
SICOM, S8 Cours Qt 29 / 69
Élément graphique
Remarques :
Un widget dock est une fenêtre qui peut être encastrée (docked) dans
avec addDockWidget().
MyMainWindow.cpp
#include <QMainWindow>
#include <QLabel>
p ubl i c :
MyMainWindow(QWidget *parent=0 ) ;
~MyMainWindow();
p r i va te :
Qlabel * l a b e l ; / / un pointeur sur une instance de QLabel
};
MyMainWindow.h
#include "MyMainWindow.h"
/ / etc . . .
MyMainWindow::~MyMainWindow()
{
}
::. Il va nous servir à accéder à des méthodes et des propriétés surchargées (c’est-à-dire
modifiées par une classe fille).
SICOM, S8 Cours Qt 35/ 69
Élément graphique
#include <QApplication>
#include "MyMainWindow.h"
w.show(); / / affichage
Signal et Slot
une classe qui émet un signal ne sait pas (et ne se soucie pas de)
quels slots vont recevoir ce signal.
Connexion
#include <QApplication>
#include <QPushButton>
bouton.show();
return app.exec();
}
Exemple
#include <QObject>
#include <QDebug>
p r iv a t e :
int numero;
public:
MaClasse( int numero=0, QObject *parent=0 ) : QObject(parent), numero(numero) { }
void emettre()
{
emit send(numero); / / envoie l e signal send avec l a valeur de l a variable numero
}
signals:
void send( int ) ; / / un signal personnalisé
public s l o t s :
void receive( int valeur ) / / un s l o t personnalisé
{
qDebug() << "sign al recu " << valeur;
}
};
Utilisation
Exemple :
MaClasse monObjet1(1), monObjet2(2); / / instacie 2 objets
monObjet1.emettre();
Exemple de connexions
SICOM, S8 Cours Qt 44 / 69
Class Convertiseur : public QWidget {
……
signals :
void actualiser();
public slots:
void convertit();
void permuter(int index);
};
Qmake :
$ ls
exemple exemple.pro main.cpp main.o Makefile
/ / on exécute l’application
$ ./exemple
À chaque fois que l’on modifie le fichier .pro, il faudra exécuter à nouveau la
commande qmake pour que celle-ci mette à jour le fichier Makefile.
D’autre part, le fichier Makefile est toujours spécifique à la plateforme. Si vous
changez de plateforme (Linux −→Windows), il vous suffira d’exécuter à nouveau
la commande qmake pour générer un fichier Makefile adapté à votre système.
Qt Creator
Qt Creator
Qt Designer
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 X M L et portent l’extension . ui. Lors de la compilation, un fichier d’interface
graphique est converti en classe C++ par l’utilitaire uic, fourni par Qt.
...
Shadow
build
Le shadow build permet de séparer les dossiers contenant les codes sources des fichiers
générés (exécutable, fichiers objets .o, ...) par la fabrication (build ).
Il est important de ne pas les mélanger pour assurer convenablement les tâches courantes
(sauvegarde, gestion de versions, portablité multiplateforme, ...).
Les fichiers issus de la compilation seront donc stockés dans un répertoire séparé et créé
par Qt.
Principes (1/2)
– QGridLayout : grille
– QFormLayout : formulaire
Intérêt
Lorsqu’un layout est défini sur un widget, il prend en charge les tâches
suivantes :
le redimensionnement, le déplacement
Le principal avantage est que si le parent est déplacé, les enfants le sont
aussi.
SICOM, S8 Cours Qt 61/ 69
Positionnement deswidgets
Principe
Exemple
SICOM, S8 Cours Qt 63 / 69
Positionnement deswidgets
/ / une image
QLabel * imageLabel = new QLabel;
imageLabel->setPixmap(QPixmap("373058.png"));
/ / une l i s t e déroulante
QComboBox * sizeComboBox = new QComboBox;
sizeComboBox->addItem("100x200");
sizeComboBox->addItem("200x400");
Gestion du positionnement
/ / 2 . gestion du positionnement
/ / un layout ve r t i c a l
QVBoxLayout * layout = new QVBoxLayout;
/ / on affiche l e widget
mainWidget.show(); / / affichage de mainWidget e t de ses enfants
Transition Qt4 →
− Qt5
Cours Qt 66/ 69
Transition Qt4 →− Qt5
Compatibilité Qt4/Qt5
Qt4
La documentation générale de Qt se trouve à cette adresse :
http ://doc.qt.io/
Qt4/Qt5
Autres liens
Qt Wiki : wiki.qt.io
Qt Centre : www.qtcentre.org
Qt Forum (en) : www.qtforum.org
QtFr (fr) : www.qtfr.org
Qt Tutorial (fr) :
www.digitalfanatics.org Qt-Apps.org :
www.qt-apps.org
Qt-Prop.org : www.qt-prop.org
Qt developpez.com (fr) :
qt.developpez.com