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

aucun résumé des modifications
Aucun résumé des modifications
Aucun résumé des modifications
Un slot peut recevoir plusieurs signaux, c'est à dire qu'on peut connecter le même slot à plusieurs signaux.
 
La connexion entre un signal et un slot s'effectue en appelant la méthode statique <tt>connect</tt> de la classe <tt>QObject</tt>.
Cette méthode possède 5 paramètres :
;sender:L'objet source du signal ;
;signal:Le signal émis par l'objet source;
;receiver:L'objet receveur du signal ;
;slot:Le slot du receveur connecté au signal ;
;type:(optionnel) Type de connexion (automatique par défaut).
Seuls les 4 premiers sont obligatoires.
 
Exemple utilisant les classes <tt>Telechargement</tt> et <tt>Stockage</tt> vues auparavant :
 
{{FichierDébut|Main.cpp|largeur=70%|info=(extrait) Connextion entre signaux et slots|icon=Crystal Clear mimetype source cpp.png}}
// ...
 
Telechargement *telechargePage = new Telechargement( /*...*/ );
Stockage *stockageCleUsb = new Stockage( /*...*/ );
 
QtObject::connect(
telechargePage, SIGNAL(fichierRecu(QString)), // signal fichierRecu émis par telechargePage
stockageCleUsb, SLOT(stockerFichier(QString)) // connecté au slot stockerFichier de stockageCleUsb
);
 
// ...
{{FichierFin}}
 
Si on connecte plusieurs slots à un signal, il seront invoqués séquentiellement dans l'ordre où ils sont connectés.
Par exemple, pour successivement copier puis supprimer le fichier et enfin afficher un message quand le telechargement est terminé :
{{FichierDébut|Main.cpp|largeur=70%|info=(extrait) Connextion entre signaux et slots|icon=Crystal Clear mimetype source cpp.png}}
// ...
 
QtObject::connect(
telechargePage, SIGNAL(fichierRecu(QString)),
stockageCleUsb, SLOT(stockerFichier(QString))
);
QtObject::connect(
telechargePage, SIGNAL(fichierRecu(QString)),
stockageCleUsb, SLOT(supprimerFichier(QString))
);
QtObject::connect(
telechargePage, SIGNAL(fichierRecu(QString)),
stockageCleUsb, SLOT(finArchivage())
);
 
// ...
{{FichierFin}}
 
Le slot doit posséder une signature compatible avec le signal auquel il est connecté. C'est-à-dire :
* Il doit posséder le même nombre de paramètre ou moins que le signal. Les paramètres manquants seront ignorés (voir l'exemple précédent pour le slot <tt>finArchivage()</tt> connecté au signal <tt>fichierRecu(QString)</tt>).
* Ces paramètres doivent être du même type.
* Un signal retourne toujours void.
* Un slot peut retourner une valeur, cependant celle-ci est ignorée par le signal. Elle ne sert que si le slot est invoqué directement, comme n'importe quel autre méthode de la classe.
 
==Utilisation==