« Programmation Qt/Signaux et slots » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
CaBot (discussion | contributions)
m Bot : Ajout de la catégorie Catégorie:Programmation Qt (livre)
Aucun résumé des modifications
Ligne 1 : Ligne 1 :
les signaux / slots sont des concepts pour envoyer une instruction.:
les signaux / slots sont des concepts pour envoyer une instruction.:



* 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 .note l'objet peut aussi prendre la valeur du signal. <em>exemple:quitter le programe</em>
* 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 programe</em>


----
----
Ligne 9 : Ligne 8 :


==Explication==
==Explication==

Qt rajoute les signaux et les slots
Qt rajoute les signaux et les slots


par exemple objet 1 envoi signal 1* vers<sup>1</sup> slot 2, objet 2 recoit signal 1 et fait slot 2.on connect signal 1* a slot<sup>1</sup> 2. et objet 2 fait l'action slot 2.
par exemple objet 1 envoi signal 1* vers<sup>1</sup> slot 2, objet 2 recoit signal 1 et fait slot 2.on connect signal 1* a slot<sup>1</sup> 2. et objet 2 fait l'action slot 2.

==Utilisation==
==Utilisation==

maintenant voici l'exemple:<br />
maintenant voici l'exemple:<br />


Ligne 21 : Ligne 23 :
on connecte clicked() a quit()
on connecte clicked() a quit()
et quand l'utilisateur clique sur le bouton l'application se ferme.
et quand l'utilisateur clique sur le bouton l'application se ferme.


===voici connect!===
===voici connect!===

connect() est une méthode statique.
connect() est une méthode statique.
pour appeler une methode statique:
pour appeler une methode statique:
<pre>QObject::connect();</pre>
<pre>QObject::connect();</pre>

La méthode connect prend 4 arguments :
La méthode connect prend 4 arguments :


Ligne 31 : Ligne 37 :
* Un pointeur vers l'objet qui contient le slot récepteur.
* 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.
* Le nom du slot qui doit s'exécuter lorsque le signal se produit.

===exercice , quitter quand on appuie sur le bouton===
===exercice , quitter quand on appuie sur le bouton===

faisons un code (mafenetre.cpp)
faisons un code (mafenetre.cpp)
<pre>
<pre>
Ligne 49 : Ligne 57 :
}
}
</pre>
</pre>

<pre>
<pre>
//MaFenetre.h
//MaFenetre.h
Ligne 68 : Ligne 77 :
#endif
#endif

</pre>
</pre>

<pre>#include "MaFenetre.h"
<pre>#include "MaFenetre.h"
Ligne 84 : Ligne 93 :
}
}
</pre>
</pre>

faite qmake , make
faite qmake , make


Testons notre code ! une fenêtre s'ouvre
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 !
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"===
===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().
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".
Je vous propose de créer un second bouton qui se chargera d'afficher la fenêtre "A propos de Qt".


<br />
---
<br />
---
c'est bon?<br />
voici le code:
voici le code:
<pre>
<pre>
Ligne 122 : Ligne 130 :
#endif
#endif

</pre>
</pre>

<pre>#include "MaFenetre.h"
<pre>
#include "MaFenetre.h"
MaFenetre::MaFenetre() : QWidget()
MaFenetre::MaFenetre() : QWidget()
Ligne 141 : Ligne 150 :
}
}
</pre>
</pre>

lancer l'application<br />
lancer l'application<br />

Le bouton "Quitter" ferme toujours l'application.<br />
Le bouton "Quitter" ferme toujours l'application.<br />
Quant à "A propos", il provoque l'ouverture de la fenêtre "A propos de Qt".
Quant à "A propos", il provoque l'ouverture de la fenêtre "A propos de Qt".


==parametre dans le signaux et les slot==
==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.
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.



Version du 20 avril 2011 à 10:38

les signaux / slots sont des concepts pour envoyer une instruction.:

  • 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 programe


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?


En travauxlink={{{link}}}

Cette page est en travaux. Tant que cet avis n'aura pas disparu, veuillez en considérer le plan et le contenu encore incomplets, temporaires et sujets à caution. Si vous souhaitez participer, il vous est recommandé de consulter sa page de discussion au préalable, où des informations peuvent être données sur l'avancement des travaux.