Cours:SignalSlotQT : Différence entre versions

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

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