1er pas en Qt
Dans cette activité vous allez utiliser l’environnement de développement intégré (ou EDI ou IDE en anglais) nommé Qt Creator pour créer des applications graphiques.
Vous serez amenés à l’utiliser fréquemment pour tout ce qui concerne la programmation en langage C ou C++ aussi bien sur PC que sur Raspberry Pi.
Cet IDE a été conçu spécialement pour développer des programmes C++ avec le framework Qt qui est un ensemble de librairies qui permettent — entre autres — de développer des application graphiques, d’accéder par programme à des bases de données ou au réseau, de dessiner sur l’écran (2D ou 3D)…
💻 Travail n° 1 Conversion °C ↔ °F
Ce travail guidé va vous permettre de coder votre 1ère application Qt.
🎯 Travail à faire :
-
Exécuter Qt Creator
-
Créer un projet avec les caractéristiques suivantes :
-
Reproduire l’IHM (Interface Homme Machine) ci-dessous dans l’espace de travail qui s’ouvre lorsqu’on double-clique sur le fichier
maingui.ui.Le type et le nom à donner à chacun des composants figure dans l’arborescence reproduite sous l’IHM
-
Faire un clic droit sur le bouton “Convertir” et choisir l’évènement
clicked() -
Étudier le code ci-dessous et le reproduire dans la méthode
void MainGUI::on_btnConvert_clicked() { … }qui s’affiche dans l’éditeur de texte de Qt Creator suite à l’action précédentevoid MainGUI::on_btnConvert_clicked() { double tC; // température exprimée en °C et à convertir double tF; // résultat de la conversion en °F bool isOK; // booléen utilisé pour indiquer si la conversion "chaine -> nombre" a réussi // Lire dans la variable `tC` la valeur saisie dans le champ de la température en °C [->text()] // et tenter de la convertir en nombre [.toDouble(&isOK)] tC = ui->ledtFromValue->text().toDouble(&isOK); // SI la conversion a échoué ALORS if( !isOK) { // Afficher un message d'erreur // (nécessite un `#include <QMessageBox>` en début de fichier) QMessageBox::critical(this , tr("Erreur de saisie") , tr("La valeur saisie pour la température\n" "n'est pas valide" ) , QMessageBox::Ok ); // Effacer le contenu des 2 champs de saisie ui->ledtFromValue->clear(); ui->ledtToValue->clear(); // SINON } else { // Convertir la température °C en température °F tF = tC * (9/5) + 32; // Afficher le résultat de conversion [->setText(...)] // après l'avoir mis sous forme de chaine de caractères [QString::number(tF)] ui->ledtToValue->setText(QString::number(tF)); } // FINSI } -
Exécuter le programme pour le tester
-
Faire évoluer le code source du programme de manière à effacer le contenu des 2 champs de saisie lorsqu’on clique sur le bouton “Effacer” de l’IHM
-
Recoder l’application dans un nouveau projet afin qu’elle permette la conversion dans les 2 sens (°C → °F et °F → °C)
Ci-dessous figure l’interface graphique de l’application demandée :
Le design de cette interface vous est donné dans le fichier mainui.ui :
-
L’ouvrir dans QtDesigner
-
Copier/coller l’entièreté du contenu de la boîte de dialogue
MainUIdans votre application Qt Widgets
-
Faire en sorte que l’évènement
clickeddes 2 “boutons radio” soit connecté au même slot. -
Pour détecter l’émetteur réel du signal dans ce slot — c’est-à-dire déterminer si l’utilisateur a choisi une conversion °C → °F ou l’inverser — on pourra utiliser la méthode
QObject::sender():if(QObject::sender() == ui->rbtnCversF) { (1) // ... }1 le ifest vrai si c’est le radio boutonrbtnCversFqui a déclenché le signal. -
Le slot des boutons radio doit simplement modifier le texte de l’unité des champs de saisie et de résultat.
-
Enfin, dans le slot du bouton “Convertir”, on peut savoir quel bouton radio est actuellement sélectionné en utilisant la méthode
isChecked()de l’un des boutons. Dans notre cas où nous n’avons que 2 boutons radio, si une des méthodes renvoiefalse, c’est que l’autre bouton radio est forcément sélectionné.if(ui->rbtnCverF->isChecked()) { // Convertir de °C en °F } else { // Convertir de °F en °C }
-
-
🔥 Recoder l’application de manière plus professionnelle en répartissant le code dans plusieurs fichiers.
Une architecture très commune est de séparer le code qui gère l’interface homme-machine (→ la vue) des données “métier” (→ le modèle). Le lien entre la vue et le modèle est assuré par un code qu’on appelle le contrôleur : on aboutit alors à une architecture dîte MVC (Modèle - Vue - Contrôleur).
Le diagramme de classes proposé pour cette application figure ci-dessous :
💻 Travail n° 2 Temps de montée en t° d’un ballon d’eau chaude
On vous demande ici de coder par vous-même une application “Qt Widget”.
Ceci comprend :
-
le design de l’IHM
-
la programmation C++ du code associé à cette IHM
🎯 Travail à faire :
Concevoir et coder une application Qt — avec architecture MVC — qui permet de calculer et afficher le temps de montée en température d’un ballon d’eau chaude connaissant :
-
sa contenance (en l)
-
sa puissance (en W)
-
sa température de départ (en °C)
-
sa température d’arrivée (en°C)
|
Le temps de montée en température d’un ballon d’eau chaude — exprimée en secondes et notée Δt — est déterminée par la formule suivante : avec :
|
La contenance (en l) du ballon d’eau chaude sera saisie dans une combo box offrant les choix suivants : 15, 30, 40, 50, 65, 75, 80, 100 (choix par défaut ⇒ propriétés currentText et/ou currentIndex), 150, 200, 250 et 300.
La puissance (en W) du ballon d’eau chaude sera saisie dans une spin box dont l’étendue de valeurs ira de 1000 à 3000 avec un pas de 10.
Les températures de départ et d’arrivées (en °C) seront également entrées via des spin boxes :
-
dans un intervalle [0, 60] avec pas de 10 pour la température d’entrée. La valeur par défaut sera de 15°C (propriété
valuedu widget) -
dans un intervalle [50, 60] avec un pas de 1 pour la température d’arrivée. La valeur par défaut sera de 50°C.
La durée calculée devra être exprimée en heures, minutes, secondes.
Ci-dessous une illustration de ce qui est attendu :
|
On définit une image de fond pour une application Qt en appliquant une feuille de style CSS comme pour un site web.
|
Le diagramme de classes de l’application devra être conforme à ce qui suit :
|
Les méthodes des classes Cela se note en UML/SysML par un soulignement de la méthode. Une méthode statique est une méthode de classe qui peut être appelée sans créer d’objet (⇔ sans instancier la classe). Cela est pratique dans certains cas : exemple : méthode statique
QString:number() de Qt
Ci-dessous la méthode pour créer et utiliser une méthode statique qui additionne 2 nombres entiers : fichier
calcul.h
fichier
calcul.cpp
fichier
main.cpp
|
🞄 🞄 🞄







