« 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
== Définition ==
Les signaux et slots permettent d'interconnecter des objets Qt entre eux :
* un '''signal''' est uneun valeurévènement envoyéeenvoyé par un objet (<em>exemple : j'aiclic appuyéde la souris sur leun bouton</em>) ;
* un '''slot''' est une fonction réalisant l'action associée à un signal.
 
=== Définir un signal ===
 
Un signal est défini dans le fichier d'en-tête déclarant la classe :
 
{{FichierDébut|Telechargement.h|largeur=70%|info=(extrait) Définition du signal|icon=Crystal Clear mimetype source cpp.png}}
<source lang="cpp-qt">
class Telechargement: public QObject
{
Q_OBJECT
 
// ...
 
public signals:
void fichierRecu(QString chemin_fichier);
 
// ...
}
</source>
{{FichierFin}}
 
Aucune implémentation n'est à définir dans la classe.
Le signal est utilisable dans la définition de la classe :
 
{{FichierDébut|Telechargement.cpp|largeur=70%|info=(extrait) Utilisation du signal|icon=Crystal Clear mimetype source cpp.png}}
<source lang="cpp-qt">
void Telechargement::Terminer()
{
// Nettoyage...
// ...
// Signaler la fin
emit fichierRecu( this->m_chemin_fichier );
}
</source>
{{FichierFin}}
 
=== Définir un slot ===
 
Un slot est similaire à une méthode de la classe :
* Il doit être déclaré dans l'en-tête, dans une section <tt>slots</tt> ;
* Il doit être implémenté dans la définition de la classe.
 
{{FichierDébut|Stockage.h|largeur=70%|info=(extrait) Déclaration des slots|icon=Crystal Clear mimetype source h.png}}
<source lang="cpp-qt">
class Stockage: public QObject
{
Q_OBJECT
 
// ...
 
public slots:
bool stockerFichier(QString chemin_fichier);
bool supprimerFichier(QString chemin_fichier);
void finArchivage();
 
// ...
}
</source>
{{FichierFin}}
 
{{FichierDébut|Stockage.cpp|largeur=70%|info=(extrait) Définition des slots|icon=Crystal Clear mimetype source cpp.png}}
<source lang="cpp-qt">
// ...
 
bool Stockage::stockerFichier(QString chemin_fichier)
{
// ... copie du fichier spécifié dans le lieu de stockage
}
 
bool Stockage::supprimerFichier(QString chemin_fichier)
{
// ... suppression du fichier spécifié
}
 
void finArchivage()
{
// ... afficher le message "Fin de l'archivage"
}
 
// ...
</source>
{{FichierFin}}
 
=== Connexion ===