Cours:PooQT : Différence entre versions
(Page créée avec « ={{Rouge|Spécialisation d'un QWidget}}= Media:LampeQT.zip ») |
|||
| Ligne 1 : | Ligne 1 : | ||
={{Rouge|Spécialisation d'un QWidget}}= | ={{Rouge|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 : | ||
| + | {{Rouge|On spécialise une classe}} | ||
| + | |||
| + | L'objectif sera pour vous de concevoir un bouton possédant un {{Rouge|slot}} qui permettra de changer sa couleur de remplissage (background-color) en fonction d'un paramètre de type {{Rouge|int}}. | ||
| + | |||
| + | Vous pouvez repartir du projet suivant si les parties précédentes n'ont pas été toutes traitées : | ||
[[Media:LampeQT.zip]] | [[Media:LampeQT.zip]] | ||
| + | |||
| + | ={{Bleu|Une nouvelle classe}}= | ||
| + | |||
| + | Nous souhaitons faire une classe qui hérite de QPushButton, ce qui se traduit par : | ||
| + | <source lang=cpp> | ||
| + | classe MonButton: public QPushButton | ||
| + | { | ||
| + | Q_OBJECT | ||
| + | ... | ||
| + | } | ||
| + | </source> | ||
| + | |||
| + | '''Remarque : ''' Lorsque vous créez votre nouvelle classe dans qtcreator, utilisez {{Rouge|QWidget}} comme {{Rouge|"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 | ||
| + | |||
| + | <source lang=cpp> | ||
| + | ... | ||
| + | public : | ||
| + | MonButton(QWidget * parent = 0); // valeur par défaut 0 : pas de parent | ||
| + | ... | ||
| + | </source> | ||
| + | |||
| + | La définition du constructeur dans le fichier cpp sera de la forme : | ||
| + | <source lang=cpp> | ||
| + | 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 ... | ||
| + | } | ||
| + | </source> | ||
| + | |||
| + | Bien entendu, on va ajouter des nouvelles fonctionnalités en déclarant les prototypes des méthodes/slots dans le {{Rouge|.h}} et en les définissant dans le {{Rouge|.cpp}} | ||
| + | |||
| + | <source lang=cpp> | ||
| + | ... | ||
| + | // .h | ||
| + | public slots : | ||
| + | void maFonction( mes paramètres ); | ||
| + | ... | ||
| + | // .cpp | ||
| + | void MonButton::maFonction( mes paramètres ) | ||
| + | { | ||
| + | // on fait le job ici !! | ||
| + | } | ||
| + | ... | ||
| + | </source> | ||
| + | |||
| + | |||
| + | <source lang=cpp> | ||
| + | </source> | ||
Version du 12 novembre 2017 à 21:38
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 !!
}
...