0% ont trouvé ce document utile (0 vote)
74 vues74 pages

Mise en Œuvre de La POO:: Développement D'une Application Desktop Avec Framework QT

dev

Transféré par

kingvonisation
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
74 vues74 pages

Mise en Œuvre de La POO:: Développement D'une Application Desktop Avec Framework QT

dev

Transféré par

kingvonisation
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Mise en œuvre de la POO:

Développement d’une application


Desktop avec Framework Qt
Introduction sur Qt Framework
 Dans la terminologie Qt, un widget est un élément visuel dans une
interface utilisateur. Les boutons, les menus et les barres de
défilement sont des exemples de widgets.
 Qt possède une collection de modules:
 QtCore: la base de toutes les bibliothèques fournissant les
conteneurs, gestion de threads, gestion des évènements, etc
 QtGui et QtWidgets : outils graphiques pour Desktop
 QtNetwork: classes nécessaires pour les communications réseau
 QtWebkit: moteur webkit permettant l’utilisation de pages web et
web apps dans l’application Qt.
 QtSQL:, permettant de interagir facilement avec les SGBD: SQLITE,
MySQL, PostgreSQL
Introduction sur Qt Framework
• Les objets Qt possèdent beaucoup d’attributs accessibles avec les
accesseurs (setters et getters)
• En Qt, si un attribute est appelé “foo”, les setter/getter associés
pourrait avoir les signatures:

• Si foo est un attribut de type booléen, le getter est généralement


préfixé par is, par exemple, bool isFoo().
• Exemple: un objet QPushButton possède des attributs : text, font,
tooltip, icon,
Introduction sur Qt Framework
• Les widgets peuvent contenir d’autres widgets ; par exemple, une
fenêtre d’application est habituellement un widget qui comporte
un QMenuBar, quelques QToolBar, un QStatusBar et d’autres
widgets.
• La plupart des applications utilisent un QMainWindow ou un
QDialog comme fenêtre d’application, mais Qt est si flexible que
n’importe quel widget peut être une fenêtre.
• L’application graphique en Qt doit comporter une fenêtre
principale et optionnellement un ou plusieurs sous-fenêtres.
Composants Qt: Input
Composants Qt: Input
Composants Qt: Output
Composants Qt: Boutton
Autres composants Qt
Hierarchie des classes
Notion de fenêtre
• Un widget qui n'est pas incorporé dans un
widget parent est appelé une fenêtre.
• Les fenêtres ont un cadre et une barre de
titre, mais il est également possible de créer
des fenêtres sans décoration en utilisant
des propriétés spécifiques(window flags).
• La création de fenêtres personnalisées est
réalisée à partir d’une nouvelle classe qui
hérite de QWidget, QDialog ou
QMainWindow.
• Ensuite, on compose sa fenêtre
personnalisée en y intégrant des widgets :
Première application Qt
• Créer une nouveau projet
 Fichier > Nouveau Projet > Application> Application Qt avec
Widget
 Renseigner le nom du projet
 Renseigner le nom de classe représentant la fenêtre principale de
l’application, par exemple MaFenetre puis la classe parent héritée
(Qwidget)
 Décocher la case à cocher Générer le code de la fenêtre
 Exécuter le programme principal
Première application Qt
Première application Qt
• Code de la fenêtre: mafenetre.h
Première application Qt
• Code de la fenêtre: mafenetre.cpp
Première application Qt
• Ajouter les widgets enfants
Première application Qt
• Instancier les widgets enfants dans le constructeur du parent
Positionnement des widgets(Layout)
• Qt utilise les classes QxxxLayout pour positionner
automatiquement les widgets enfants dans un widget.
• Toutes les sous-classes de QWidget peuvent utiliser les layouts
pour gérer leurs enfants.
Positionnement des widgets(Layout)
• Quelques layouts : horizontal, vertical, grille, formulaire ...
Positionnement des widgets(Layout)
• Utiliser la méthode addWidget() pour ajouter les widgets dans
layout
• void QLayout::addWidget(QWidget *widget)
• Utiliser addLayout() pour ajouter des layouts dans un layout
• void QLayout::addLayout(QLayout *layout)
• Associer un layout à un widget qui devient le propriétaire du
layout et parent des widgets inclus dans le layout (layout principal)
• void QWidget::setLayout (QLayout *layout)
Positionnement des widgets(Layout)
Positionnement des widgets(Layout)
Positionnement des widgets(Layout)
Documentation(Help)
Signals et Slots
 Qt Framework fournit 03 mécanismes d’échange de message: Signal, Slot et
connect pour la gestion des événements
 Signal: un messages émis par un objet lorsqu’un évènement particulier se
produit.
 Slot: une fonction appelée en réponse d’un Signal.
 Connect: méthode qui lie un signal à un slot.
Signals et Slots
Exemple: Communication entre Slider et ProgressBar(méthode manuelle)
Signals et Slots
Exemple: Communication entre Slider et ProgressBar (méthode
graphique)
Signals et Slots
 Tout objet dont la classe hérite (directement ou non) de la classe
QObject peut émettre et recevoir un signal.
 Un signal peut être connecté à un autre signal. Dans ce cas,
lorsque le premier signal est émis, il entraîne l'émission du second.
 Émission d'un signal peut être "automatique" par exemple
lorsqu'on appuie sur un bouton, le signal existe déjà dans la classe
utilisée (QPushButton).
 On peut forcer l'émission d'un signal à l'aide de la méthode emit :
emit nomSignal(parametreSignal);
Signals et Slots
• La déclaration d'un signal personnalisé est possible:
 pas de valeur de retour (donc void) et
 pas de définition de la méthode (donc pas corps)
 Pour déclarer un signal, on utilise le mot clé signals dans le fichier
d'entête (.h) comme public, private...

signals :
void nomSignal(parametreSignal);
Signals et Slots
Boîte de dialogue: QDialog
 Une fenêtre de dialogue est une fenêtre principalement utilisée
pour les tâches à court terme et les communications brèves avec
l'utilisateur. Elle peut être modale ou non.
 Une boîte de dialogue modale est une boîte de dialogue qui
bloque l'entrée dans d'autres fenêtres visibles dans la même
application. La manière la plus courante d'afficher une boîte de
dialogue modale consiste à appeler sa fonction exec().
 Un dialogue non modale est une boîte de dialogue qui fonctionne
indépendamment des autres fenêtres de la même application. Les
boîtes de dialogue non modélisées sont affichées à l'aide de
show(), qui renvoie immédiatement le contrôle à l'appelant.
Boîte de dialogue: QDialog
 Fichier form.h
Boîte de dialogue: QDialog
 Fichier form.cpp
Boîte de dialogue: QDialog
 Fichier mafenetre.h
Boîte de dialogue: QDialog
 Fichier mafenetre.cpp
Boîte de dialogue: QDialog
Boîte de dialogue prédéfinie: QMessageBox
 Elle permet d’informer ou demander des infos à l’utilisateur.
 Il existe de nombreuses classes permettant de créer des boîtes de
dialogue(QColorDialog, QFontDialog, QPageSetupDialog,
QFileDialog, QPrintDialog, QInputDialog, QProgressDialog,
QErrorMessage) mais on va utiliser QMessageBox.

Ex1: Boîte de dialogue avec un bouton OK

QMessageBox msgBox;
msgBox.setText("The document has
been modified.");
int ret = msgBox.exec();
Boîte de dialogue prédéfinie: QMessageBox
Ex2: Boîte de dialogue avec 3 boutons Save, Discard, Cancel

QMessageBox msgBox;
msgBox.setText("The document has been modified.");
msgBox.setInformativeText("Do you want to save your
changes?");
msgBox.setStandardButtons(QMessageBox::Save |
QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();
Boîte de dialogue prédéfinie: QMessageBox
NB: Il est possible de créer une boîte de dialogue avec les méthodes
statiques de la classe QMessageBox suivantes:
1. void about(QWidget * parent, const QString & title, const QString & text)
2. void aboutQt(QWidget * parent, const QString & title = QString())
3. StandardButton critical(QWidget * parent, const QString & title, const QString
& text, StandardButtons buttons = Ok, StandardButton defaultButton =
NoButton)
4. StandardButton information(QWidget * parent, const QString & title, const
QString & text, StandardButtons buttons = Ok, StandardButton defaultButton =
NoButton)
5. StandardButton question(QWidget * parent, const QString & title, const QString
& text, StandardButtons buttons = StandardButtons( Yes | No ),
StandardButtondefaultButton = NoButton)
6. StandardButton warning(QWidget * parent, const QString & title, const QString
& text, StandardButtons buttons = Ok, StandardButton defaultButton =
NoButton)
Boîte de dialogue prédéfinie: QMessageBox
Créer des fenêtres principales: QMainWindow
Fenêtres principales: menus et barres d’outils
• La majorité des applications GUI modernes proposent des menus,
des menus contextuels et des barres d’outils.
• Les menus permettent aux utilisateurs d’explorer l’application et
d’apprendre à connaître de nouvelles commandes
• Les menus contextuels et les barres d’outils fournissent un accès
rapide aux fonctionnalités fréquemment utilisées.
Fenêtres principales: menus et barres d’outils
• Pour pouvoir utiliser des ressources de Qt(images, videos,…), il
faut créer le fichier ressource de façon suivante:
File > New File or Project > Qt > Qt Resource File > Choose.
Fenêtres principales: menus et barres d’outils
• Pour pouvoir utiliser des ressources de Qt(images, videos,…), il
faut créer le fichier ressource de façon suivante:
 Copier les dossiers de fichiers dans le repertoire de votre projet
 Sélectionner File > New File or Project > Qt > Qt Resource File >
Choose.
Fenêtres principales: menus et barres d’outils
Fenêtres principales: menus et barres d’outils
3. Sélectionner Ajouter > Ajouter un préfixe

4. Dans le champs Préfixe, remplacer le préfixe par défaut par slash ( / )


Fenêtres principales: menus et barres d’outils
4. Sélectionner Ajouter > Ajouter des fichiers
Fenêtres principales: Gestion de fermeture
La fonction closeEvent() est une fonction virtuelle dans QWidget qui
est appelée automatiquement quand l’utilisateur ferme la fenêtre.
Elle est réimplémentée dans MainWindow, de sorte qu’on puisse
poser à l’utilisateur la question standard "Voulez-vous enregistrer vos
modifications ?"
Fenêtres principales: Gestion de fermeture
Fenêtres principales: Configurer une Action
Créer un slot about() que l’on va connecter à une action
actionApropos.
Fenêtres principales: Configurer une Action
Fenêtres principales: Barre d’états
 Une barre d'état peut afficher trois types de messages différents :
 temporaire : affiché brièvement. Exemple : utilisé pour afficher les
textes explicatifs de la barre d'outils ou des entrées de menu.
 normal : affiché tout le temps, sauf quand un message temporaire
est affiché. Exemple : utilisé pour afficher la page et le numéro de
ligne dans un traitement de texte.
 permanent : jamais caché. Exemple : utilisé pour des indications
de mode important comme le verrouillage des majuscules.
 La barre d'état peut être récupéré à l'aide de
QMainWindow::statusBar() et remplacé à l'aide de
QMainWindow::setStatusBar().
Fenêtres principales: Zone centrale
 La fenêtre principale possède une zone centrale conçu pour
recevoir un et un seul widget.
 On y insère un Qwidget ou une de ses classes dérivées et on s'en
sert comme conteneur pour mettre d'autres widgets à l'intérieur.
Fenêtres principales: Zone centrale
 Il existe deux types de fenêtre principale:
• SDI (Single Document Interface) : elles ne peuvent afficher qu'un
document à la fois. Exemple: Bloc-Notes.
• MDI (Multiple Document Interface) : elles peuvent afficher
plusieurs documents à la fois. Elles affichent des sous-fenêtres
dans la zone centrale. C'est le cas par exemple de Qt Designer.
Fenêtres principales: Zone centrale SDI
 Pour placer un widget dans la zone centrale, on utilise la méthode
setCentralWidget() de la QMainWindow.
Fenêtres principales: Zone centrale MDI
 Pour pouvoir afficher plusieurs sous-fenêtres, on utilise un widget
QMdiArea comme zone centrale en se servant de la méthode
setCentralWidget(…) de la QMainWindow.
 Les sous-fenêtres sont ajoutées doivent être ajoutées dans le
widget QMdiArea par la méthode addSubWindow(…) de widget
QMdiArea qui renvoie un pointeur QMdiSubWindow
représentant la sous-fenêtre.
Fenêtres principales: Zone centrale MDI
 La sous-fenêtre peut être supprimée à l’aide de la méthode
removeSubWindow() de widget QMdiArea
Fenêtres principales: Zone centrale MDI
Pages d’accueil: SplashScreen
 De nombreuses applications affichent une page d’accueil au
démarrage.
 Certains développeurs se servent de cette page pour dissimuler un
démarrage lent, alors que d’autres l’exploitent pour leurs services
marketing.
 La classe QSplashScreen facilite l’ajout d’une page d’accueil aux
applications Qt.
 Cette classe affiche une image avant l’apparition de la fenêtre
principale.
 Elle peut aussi écrire des messages sur l’image pour informer
l’utilisateur de la progression du processus d’initialisation de
l’application.
 En général, le code de la page d’accueil se situe dans main(), avant
l’appel de QApplication::exec().
Pages d’accueil: SplashScreen
Zone de notification( system tray)
 Le système d’exploitation moderne fournit généralement une zone
spéciale sur le bureau appelée Zone de notification où les
applications peuvent afficher des icônes ou une message court.

 Qt fournit une classe QSystemTrayIcon pour faciliter la création de


cet objet.
Zone de notification( system tray)

 Pour afficher un message sur la zone de notification :


Classes utilitaires
 Qt fournit des classes de conteneur de modèles:
 Les conteneurs séquentiels Qt incluent: QVector, QList,
QLinkedList, QStack, QQueue.
 Les conteneurs associatifs Qt incluent: QMap, QMultiMap, QHash,
QMultiHash, QSet.
 QStack<T> est une pile fournissant une classe de modèle Qt.
Classes utilitaires
 QVector<T> fournit une classe de modèle de tableau dynamique.
Il peut être initialisé de différentes manières:
Classes conteneurs
 La classe QList est une classe de modèle qui fournit des listes. Il
stocke les éléments dans une liste qui fournit un accès rapide par
index et des insertions et des suppressions basées sur des index.
 Pour insérer des éléments dans la liste, vous pouvez utiliser
operator<<() , insert() , append() ou prepend().
 Pour accéder à l'élément à une position d'index particulière, on
peut utiliser l'operator[]() ou at() .
 Pour supprimer des éléments, il existe des fonctions telles que
removeAt() , takeAt() , takeFirst() , takeLast() , removeFirst() ,
removeLast() ou removeOne().
Classes d’affichage des données
 Qt fournit des classes facilitant l’affichage des données dans votre
application. Ces classes sont:
 QTableWidget, QTableView: pour les afficher sous forme de
tableau
 QListWidget, QListView: pour les présenter comme liste
d’éléments
 QTreeWidget, QTreeView: sous forme des arborescences
Classes d’affichage: QTableWidget
 Pour vider un tableau de type QTableWidget:

 Pour insérer des enregistrements dans un QTableWidget:

 Pour obtenir le numéro d’une ligne sélectionnée:


Classes d’affichage: QTableWidget
 Exemple: Gestion des clients

lineEditNumero

lineEditNom

tableCustomer
lineEditAdresse

btnAdd btnCancel

btnEdit btnUpdate btnDelete


Classes d’affichage: QTableWidget
 Pour personnaliser le widget QTableWidget, modifier les
propriétés editTriggers, selectionMode, selectionBehavior dans
l’Editeur de propriétés
Classes d’affichage: QTableWidget
 Pour ajouter un nouvel enregistrement, cliquer sur le bouton
btnAdd:
Classes d’affichage: QTableWidget
 Pour éditer un enregistrement, cliquer sur le bouton btnEdit:
Classes d’affichage: QTableWidget
 Pour modifier un enregistrement, cliquer sur le bouton
btnUpdate:
Classes d’affichage: QTableWidget
 Pour supprimer un enregistrement, cliquer sur le bouton
btnDelete:
Références
https://doc.qt.io/qt-5/qtexamplesandtutorials.html
https://zetcode.com/gui/qt5/
https://qt.developpez.com/faq/
http://sdz.tdct.org/sdz/le-gui-avec-qt-la-suite.html#Lamanipulationdesfichiers
https://www.siloged.fr/cours/QTCreator/DeployeruneapplicationQT.html

Vous aimerez peut-être aussi