Le diagramme de classe correspondant à l'exemple de code proposé est le suivant :
Remarque : Pour simplifier les classes Animal, Tortue et Lievre ont été implémentées dans les mêmes fichiers : animal.h et animal.cpp.
#ifndef ANIMAL_H
#define ANIMAL_H
/****************** LA CLASSE ANIMAL ******************/
#include <QLabel>
class Animal
{
protected :
// Pointeur vers un QLabel affichant une image de l'animal
QLabel* ptrUI;
public :
// Méthode d'initialisation commune à tous les animaux
void init();
// Méthode virtuelle, qui n'est pas implémentée dans la classe
// animal mais qui devra impérativement l'être dans les classes
// filles
virtual void avancer() = 0;
// Destructeur
virtual ~Animal();
};
/****************** LA CLASSE LIEVRE ******************/
class Lievre : public Animal {
public :
// Les classes filles ont leur constructeur
Lievre(QLabel* label);
// Méthode avancer qui est virtuelle dans la classe mère
void avancer();
// Destructeur
~Lievre();
};
/****************** LA CLASSE TORTUE ******************/
class Tortue : public Animal {
public :
// Les classes filles ont leur constructeur
Tortue(QLabel* label);
// Méthode avancer qui est virtuelle dans la classe mère
void avancer();
// Destructeur
~Tortue();
};
#endif // ANIMAL_H
#include "Animal.h"
/****************** LA CLASSE ANIMAL ******************/
void Animal::init() {
// Déplace l'Animal sur la gauche de la fenêtre
ptrUI->setFrameRect(QRect(0,ptrUI->frameRect().y(),ptrUI->frameRect().width(),ptrUI->frameRect().height()));
}
Animal::~Animal() {}
/****************** LA CLASSE LIEVRE ******************/
Lievre::Lievre(QLabel* label) {
ptrUI = label;
}
Lievre::~Lievre() {}
void Lievre::avancer() {
// Fait avancer le lièvre
ptrUI->setFrameRect(QRect(ptrUI->frameRect().x()+4,ptrUI->frameRect().y(),ptrUI->frameRect().width(),ptrUI->frameRect().height()));
}
/****************** LA CLASSE TORTUE ******************/
Tortue::Tortue(QLabel* label) {
ptrUI = label;
}
Tortue::~Tortue() {}
void Tortue::avancer() {
// Fait avancer la Tortue
ptrUI->setFrameRect(QRect(ptrUI->frameRect().x()+1,ptrUI->frameRect().y(),ptrUI->frameRect().width(),ptrUI->frameRect().height()));
}
télécharger le projet Qt complet au format zip
Article connexe : Qt - Utiliser des éléments QML dans une interface graphique