Cours:SignalSlotQT
Révision datée du 19 novembre 2018 à 16:33 par Bjacquot (discussion | contributions) (→ajouter un attribut dans la classe MainWindow)
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
Pour ajouter un objet de notre nouvelle classe, on doit bien entendu ajouter sa définition à l'endroit où on souhaite l'utiliser :
#include "maclasse.h"
On va ensuite ajouter dans la classe MainWindow un attribut (ou plusieurs), de préférence privé :
....
class MainWindow : public ....
{
....
private :
MaClasse obj1;
MaClasse obj2;
...
}
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.