Cours:SignalSlotQT : Différence entre versions
m (Bjacquot a déplacé la page Courrs:signalSlotQT vers Cours:SignalSlotQT sans laisser de redirection) |
|||
| Ligne 1 : | Ligne 1 : | ||
| + | [[Cours:3105|{{Rouge|'''Retour à la liste des Tds'''}}]] | ||
| + | |||
| + | Au besoin, la documentation QT peut-être intéressante : | ||
| + | http://doc.qt.io/qt-5/signalsandslots.html | ||
| + | |||
=spécialisation de la classe QObject= | =spécialisation de la classe QObject= | ||
| + | ==Principe :== | ||
*créer nouvelle classe | *créer nouvelle classe | ||
*nom de la classe : MaClasse (respecter la casse : ! les capitales au bon endroit ! ) | *nom de la classe : MaClasse (respecter la casse : ! les capitales au bon endroit ! ) | ||
| Ligne 26 : | Ligne 32 : | ||
}; | }; | ||
</source> | </source> | ||
| + | |||
| + | ==une classe utile :== | ||
| + | |||
| + | On va faire une classe lampe : | ||
| + | *elle aura un attribut privé : isAllume de type bool | ||
| + | *des slots (en gros le nom des méthodes sur QT) dont les prototypes sont : | ||
| + | **void allumer() | ||
| + | **void eteindre() | ||
| + | **void changerEtat() | ||
| + | *un signal | ||
| + | **il suffit de rajouter le signal dans la déclaration de la classe (header file), rien dans le cpp ! | ||
| + | **on ajoute dans la partie signals: | ||
| + | **void valueChanged(int newValue); | ||
| + | **lorsque c'est nécessaire on envoie la nouvelle valeur de la façon suivante : | ||
| + | **emit valueChanged(valeur); | ||
| + | **il faut bien entendu remplacer valeur par un truc intéressant ! | ||
| + | |||
| + | Remarque : vous pouvez laisser de côté changerEtat pour le moment. | ||
| + | |||
| + | =Utilisation de la classe= | ||
| + | |||
| + | ==ajouter un attribut dans la classe MainWindow== | ||
| + | |||
| + | ==relier signal avec slot== | ||
| + | |||
| + | ===principe=== | ||
| + | |||
| + | <source lang=cpp> | ||
| + | connect(&objetEmetteur,SIGNAL(signalEmis()),&objetRecepteur,SLOT(slotToExecute())); | ||
| + | </source> | ||
| + | |||
| + | ===afficher un message=== | ||
| + | |||
| + | |||
| + | ===changer couleur d'un bouton=== | ||
| + | |||
| + | Plusieurs "connect" sur le même signal. | ||
| + | |||
| + | =Plusieurs lampes= | ||
| + | |||
| + | =clignotement avec QTimer= | ||
Version du 14 novembre 2018 à 15:29
Retour à la liste des Tds
Au besoin, la documentation QT peut-être intéressante : http://doc.qt.io/qt-5/signalsandslots.html
Sommaire
spécialisation de la classe QObject
Principe :
- créer nouvelle classe
- nom de la classe : MaClasse (respecter la casse : ! les capitales au bon endroit ! )
- Base class : QObject
- terminé !
// fichier dans lequel est déclaré la classe QObject
#include <QObject>
// on hérite de la classe QObject
class MaClasse : public QObject
{
// mot clé pour que qmake fasse son job pour les signaux/slots notamment
Q_OBJECT
public:
// constructeur de la classe :
// le "explicit" empêche de faire des conversions bizarroïdes entre classes
// ce n'est pas à retenir
explicit MaClasse(QObject *parent = nullptr);
signals:
public slots:
};
une classe utile :
On va faire une classe lampe :
- elle aura un attribut privé : isAllume de type bool
- des slots (en gros le nom des méthodes sur QT) dont les prototypes sont :
- void allumer()
- void eteindre()
- void changerEtat()
- un signal
- il suffit de rajouter le signal dans la déclaration de la classe (header file), rien dans le cpp !
- on ajoute dans la partie signals:
- void valueChanged(int newValue);
- lorsque c'est nécessaire on envoie la nouvelle valeur de la façon suivante :
- emit valueChanged(valeur);
- il faut bien entendu remplacer valeur par un truc intéressant !
Remarque : vous pouvez laisser de côté changerEtat pour le moment.
Utilisation de la classe
ajouter un attribut dans la classe MainWindow
relier signal avec slot
principe
connect(&objetEmetteur,SIGNAL(signalEmis()),&objetRecepteur,SLOT(slotToExecute()));
afficher un message
changer couleur d'un bouton
Plusieurs "connect" sur le même signal.