Alarme domestique
Transcription
Alarme domestique
SNIR1 2014-2015 Développement logiciel Programmation Objet Programmation sous QT Projet Alarme Domestique ~ TD n°7 ~ Intégration Date : mars 2015 Version : 3.2 Référence : TD7 – Intégration Plan du document 1. Objectif....................................................................................................................................1 2. Conditions de réalisation.........................................................................................................1 3. Recommandations...................................................................................................................2 4. Etude de la classe CentraleDalarme.......................................................................................3 5. Réalisation...............................................................................................................................6 5.1. CODAGE DE LA CLASSE CODE...............................................................................................................................6 5.2. CODAGE DE LA CLASSE CENTRALEDALARME..........................................................................................................6 1. OBJECTIF Etude Algorithmique Fiche de test unitaire Relations entre classes Composition Association Principe de codage en C++ 2. CONDITIONS DE RÉALISATION Ressources utilisées : Matériel Logiciels Un PC sous Linux La suite open office Qt-creator, Modélio 3. RECOMMANDATIONS L’ensemble des éléments obtenus, classes, opérations, attributs, doivent faire l’objet d’un commentaire précis et non redondant. Le nom des variables est significatif. Alarme domestique 4. Séquence 4 Réalisation 4.1. Mise en place des détecteurs 1. Dans votre projet AlarmeDomestiqueFinale, réalisez la boîte de dialogue Detecteur comme dans le tutoriel. Initialiser le titre de la boîte avec la chaîne « Détecteur » comme le montre la figure. Créer le slot correspondant au bouton « Présence Intrus ». 2. Dans le fichier detecteur.h créez le signal IntrusDetecte( ). Modifiez la classe CentraleDalarme pour quelle puisse gérez les signaux et les slots. Dans la classe CentraleDalarme créez le slot on_IntrusDetect ( ). Dans le corps de cette méthode dans un premier temps affichez sous la forme d'une boîte de message « Un intrus a été détecté ». En respectant le diagramme de classe et en considérant que vous avez un seul détecteur pour l'instant, codez la relation entre les deux classes. Dans le constructeur de la classe CentraleDalarme, réalisez l'initialisation du pointeur sur la classe et la connexion entre le signal et le slot. 3. Dans le corps de la méthode on_pushButton_PresenceIntrus_clicked() envoyez le signal IntrusDetecte. 4. Après avoir codez la méthode void CentraleDalarme ::ActiverSurveillance( ) et la méthode void CentraleDalarme::DesactiverSurveillance( ), vérifier le fonctionnement du détecteur. L'affichage du détecteur ne peut se faire qu'avec la méthode show( ) et le masquage par la méthode hide( ) pour garder la main sur le clavier de la centrale. Intégration Page 2 sur 4 Alarme domestique Séquence 4 5. L'application demande également la création de détecteurs temporisés. Pour ce faire, créez une nouvelle classe DetecteurTemporise comme le montre la figure suivante : Surcharger la méthode on_pushButton_PrésenceIntrus_clicked() car elle ne possède pas le même comportement lorsqu'il s'agit d'un détecteur temporisé. Après avoir déplacer l'attribut ui de la section privé à une section protégé dans la classe détecteur, réalisez, manuellement dans le constructeur de la classe DetecteurTemporise, la connexion entre le signal clicked() du bouton et la surchage du slot 6. Dans le constructeur modifiez le titre de la boîte par « Détecteur temporisé ». 7. Toujours dans ce même constructeur, initialiser le pointeur tempo et réalisez la connexion entre son signal timeout() et le slot on_finTempo(). Dans le premier slot, vous devez lancez le timer pour une durée de 20 secondes (pour le test réduire à 5). Dans le second, vous devez stopper le timer et envoyer le signal IntrusDetecte. 8. Après avoir déclaré le pointeur leDetecteurTemporise, l'avoir initialisé, avoir ajouté les connexions nécessaires pour répondre au signal IntrusDetecte() et réalisé le code pour l'affichage et le masquage d'un détecteur temporisé dans la classe CentraleDalarme, vérifiez son fonctionnement. Que constatez-vous ? Comment expliquez ce phénomène. 9. Pour résoudre ce dysfonctionnement, il est nécessaire que la méthode on_pushButton_PresenceIntrus_clicked() soit virtuel dans les deux types de détecteur. Ainsi à l'exécution, la connexion sera réalisée avec la méthode de la bonne instance. Intégration Page 3 sur 4 Alarme domestique 4.2. Séquence 4 Mise en place de la sirène (fonctionne sous Windows) 10. Copiez dans votre répertoire debug ou release suivant le type de projet le fichier alarme.wav. 11. Modifiez votre fichier AlarmeDomestique.pro pour que l'aspect multimédia soit pris en compte dans votre projet, voir http://doc.qt.io/qt-5/qsound.html 12. Déclarez une nouvelle classe Sirene comme le montre la figure suivante : Dans le constructeur de la classe initialisez le pointeur leSon en lui indiquant le fichier à charger en paramètre. 13. Dans la méthode Enclencher appelez la méthode play() 14. Dans le destructeur de la classe stopper la diffusion du son et libérer la mémoire. 15. Complétez les interactions entre la classe CentraleDalarme et la classe Sirene. Vérifiez le fonctionnement. 4.3. Pour aller plus loin Notre centrale d'alarme utilise plusieurs détecteurs de différents types comme l'indiquait le diagramme de classe. Réalisez les modifications nécessaires pour répondre à ce besoin. Remplacer les cases à cocher sur l'interface du clavier par des boutons que vous désactiverez (propriété enable) sans texte dessus. L'appel de la méthode ui->pushButtonLedRouge->styleSheet() retourne un Qstring qui donne le style du bouton, cela permet de récupérer par exemple la texture standard d'un bouton. L'appel de la méthode : ui->pushButtonLedRouge->setStyleSheet(''QPushButton(background : red)'') permet de changer la couleur d'un bouton en rouge Modifiez votre code pour que la gestion des leds soit faite par ces nouveaux boutons. Intégration Page 4 sur 4