« Programmation Qt/Signaux et slots » : différence entre les versions
+ modèle + meilleur phrase introductive, amélioration à venir... |
Aucun résumé des modifications |
||
Ligne 1 : | Ligne 1 : | ||
{{Programmation Qt}} |
{{Programmation Qt}} |
||
Les signaux et slots permettent d'interconnecter des objets Qt entre eux |
Les signaux et slots permettent d'interconnecter des objets Qt entre eux : |
||
* un signal est une valeur envoyée par un objet <em>exemple :j'ai appuyé sur le bouton</em> |
* un signal est une valeur envoyée par un objet (<em>exemple : j'ai appuyé sur le bouton</em>) ; |
||
* un slot est une action qui s'active quand la valeur de l'objet qui envoie le signal arrive sur l'objet. |
* un slot est une action qui s'active quand la valeur de l'objet qui envoie le signal arrive sur l'objet. Note : l'objet peut aussi prendre la valeur du signal. (<em>Exemple : quitter le programme</em>.) |
||
---- |
---- |
Version du 18 mars 2012 à 12:37
Les signaux et slots permettent d'interconnecter des objets Qt entre eux :
- un signal est une valeur envoyée par un objet (exemple : j'ai appuyé sur le bouton) ;
- un slot est une action qui s'active quand la valeur de l'objet qui envoie le signal arrive sur l'objet. Note : l'objet peut aussi prendre la valeur du signal. (Exemple : quitter le programme.)
Explication
Qt rajoute les signaux et les slots
par exemple objet 1 envoi signal 1* vers1 slot 2, objet 2 recoit signal 1 et fait slot 2.on connect signal 1* a slot1 2. et objet 2 fait l'action slot 2.
Utilisation
maintenant voici l'exemple:
bouton a le signal clicked() et application a le slot quit()
on connecte clicked() a quit() et quand l'utilisateur clique sur le bouton l'application se ferme.
voici connect!
connect() est une méthode statique. pour appeler une methode statique:
QObject::connect();
La méthode connect prend 4 arguments :
- Un pointeur vers l'objet qui émet le signal
- Le nom du signal que l'on souhaite envoyer.
- Un pointeur vers l'objet qui contient le slot récepteur.
- Le nom du slot qui doit s'exécuter lorsque le signal se produit.
exercice , quitter quand on appuie sur le bouton
faisons un code (mafenetre.cpp)
//main.cpp #include <QApplication> #include "MaFenetre.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); MaFenetre fenetre; fenetre.show(); return app.exec(); }
//MaFenetre.h #ifndef DEF_MAFENETRE #define DEF_MAFENETRE #include <QApplication> #include <QWidget> #include <QPushButton> class MaFenetre : public QWidget // On hérite de QWidget (IMPORTANT) { public: MaFenetre(); private: QPushButton *m_bouton; }; #endif
#include "MaFenetre.h" MaFenetre::MaFenetre() : QWidget() { setFixedSize(300, 150); m_bouton = new QPushButton("Quitter", this); m_bouton->setFont(QFont("Comic Sans MS", 14)); m_bouton->move(110, 50); // Connexion du clic du bouton à la fermeture de l'application QObject::connect(m_bouton, SIGNAL(clicked()), qApp, SLOT(quit())); }
faite qmake , make
Testons notre code ! une fenêtre s'ouvre
Rien de bien extraordinaire à première vue. Sauf que... si vous cliquez sur le bouton "Quitter", le programme s'arrête !
Utilisation de la méthode connect() pour afficher "A propos"
On peut faire un autre essai pour se faire un peu plus la main si vous voulez.
Je vous ai parlé d'un autre slot de QApplication : aboutQt(). Je vous propose de créer un second bouton qui se chargera d'afficher la fenêtre "A propos de Qt".
voici le code:
//MaFenetre.h #ifndef DEF_MAFENETRE #define DEF_MAFENETRE #include <QApplication> #include <QWidget> #include <QPushButton> class MaFenetre : public QWidget // On hérite de QWidget (IMPORTANT) { public: MaFenetre(); private: QPushButton *m_bouton; QPushButton *m_aPropos; }; #endif
#include "MaFenetre.h" MaFenetre::MaFenetre() : QWidget() { setFixedSize(300, 150); m_quitter = new QPushButton("Quitter", this); m_quitter->setFont(QFont("Comic Sans MS", 14)); m_quitter->move(110, 50); QObject::connect(m_quitter, SIGNAL(clicked()), qApp, SLOT(quit())); m_aPropos = new QPushButton("A propos", this); m_aPropos->setFont(QFont("Comic Sans MS", 14)); m_aPropos->move(110, 90); QObject::connect(m_aPropos, SIGNAL(clicked()), qApp, SLOT(aboutQt())); }
lancer l'application
Le bouton "Quitter" ferme toujours l'application.
Quant à "A propos", il provoque l'ouverture de la fenêtre "A propos de Qt".
parametre dans le signaux et les slot
La méthode statique connect() est assez originale, vous l'avez vu. Il s'agit justement d'une des particularités de Qt que l'on ne retrouve pas dans les autres bibliothèques.
<poem>maintenant comment faire une slider bar qui quand la valeur change fait changer la valeur d'un afficher LCD?