Cours:SignalSlotQT

De troyesGEII
Aller à : navigation, rechercher
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

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.

Plusieurs lampes

clignotement avec QTimer