Cours:PooQT

De troyesGEII
Aller à : navigation, rechercher

Spécialisation d'un QWidget

Bien souvent, les widgets mis à disposition ne remplissent que partiellement notre cahier des charges.

Plutôt que de réécrire une nouvelle classe entièrement, il suffit la plupart du temps d'ajouter des fonctionnalités (slot, attribut ...) à une classe existance :

On spécialise une classe

L'objectif sera pour vous de concevoir un bouton possédant un slot qui permettra de changer sa couleur de remplissage (background-color) en fonction d'un paramètre de type int.

Vous pouvez repartir du projet suivant si les parties précédentes n'ont pas été toutes traitées : Media:LampeQT.zip

Une nouvelle classe

Nous souhaitons faire une classe qui hérite de QPushButton, ce qui se traduit par :

classe MonButton: public QPushButton
{
  Q_OBJECT
  ...
}

Remarque : Lorsque vous créez votre nouvelle classe dans qtcreator, utilisez QWidget comme "base class"

  • Dans QT, tous les objets graphiques héritent de la classe QWidget
  • Les différents objets sont nécessairement placés dans un conteneur (un groupe d'éléments graphiques).
  • On doit nécessairement indiquer dans le constructeur le widget parent (conteneur)
  • Le constructeur doit donc avoir un paramètre de type QWidget
  ...
public :
  MonButton(QWidget * parent = 0); // valeur par défaut 0 : pas de parent
  ...

La définition du constructeur dans le fichier cpp sera de la forme :

MonButton::MonButton(QWidget * parent)
          :QPushButton(parent)         // exécution du constructeur de la classe mère avant toute autre action
{
   // on peut ajouter ici l'initialisation d'attributs
   // ou autre ...
}

Bien entendu, on va ajouter des nouvelles fonctionnalités en déclarant les prototypes des méthodes/slots dans le .h et en les définissant dans le .cpp

...
// .h
public slots :
  void maFonction( mes paramètres );
...
// .cpp
void MonButton::maFonction( mes paramètres )
{
  // on fait le job ici !!
}
...