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

<source> bientôt obsolète, remplacé par <syntaxhighlight>
(<source> bientôt obsolète, remplacé par <syntaxhighlight>)
 
{{FichierDébut|Telechargement.h|largeur=70%|info=(extrait) Définition du signal|icon=Crystal128-source-h.svg}}
<sourcesyntaxhighlight lang="cpp-qt">
class Telechargement: public QObject
{
// ...
}
</syntaxhighlight>
</source>
{{FichierFin}}
 
 
{{FichierDébut|Telechargement.cpp|largeur=70%|info=(extrait) Utilisation du signal|icon=Crystal128-source-cpp.svg}}
<sourcesyntaxhighlight lang="cpp-qt">
void Telechargement::Terminer()
{
emit fichierRecu( this->m_chemin_fichier );
}
</syntaxhighlight>
</source>
{{FichierFin}}
 
 
{{FichierDébut|Stockage.h|largeur=70%|info=(extrait) Déclaration des slots|icon=Crystal128-source-h.svg}}
<sourcesyntaxhighlight lang="cpp-qt">
class Stockage: public QObject
{
// ...
}
</syntaxhighlight>
</source>
{{FichierFin}}
 
{{FichierDébut|Stockage.cpp|largeur=70%|info=(extrait) Définition des slots|icon=Crystal128-source-cpp.svg}}
<sourcesyntaxhighlight lang="cpp-qt">
// ...
 
 
// ...
</syntaxhighlight>
</source>
{{FichierFin}}
 
 
{{FichierDébut|Main.cpp|info=(extrait) Connextion entre signaux et slots|icon=Crystal128-source-cpp.svg}}
<sourcesyntaxhighlight lang="cpp-qt">
// ...
 
 
// ...
</syntaxhighlight>
</source>
{{FichierFin}}
 
Par exemple, pour successivement copier puis supprimer le fichier et enfin afficher un message quand le téléchargement est terminé :
{{FichierDébut|Main.cpp|info=(extrait) Connextion entre signaux et slots|icon=Crystal128-source-cpp.svg}}
<sourcesyntaxhighlight lang="cpp-qt">
// ...
 
 
// ...
</syntaxhighlight>
</source>
{{FichierFin}}
 
 
<code>connect()</code> est une méthode statique. On écrit donc :
<sourcesyntaxhighlight lang="cpp-qt">QObject::connect();</sourcesyntaxhighlight>
 
La méthode <code>connect</code> prend 4 arguments :
 
===Exercice : la fenêtre se ferme après avoir cliqué sur un bouton===
Lançons-nous dans la création du code de <code>mafenetre.cpp</code>.<source lang="cpp-qt">
 
<syntaxhighlight lang="cpp-qt">
//main.cpp
#include <QApplication>
return app.exec();
}
</syntaxhighlight>
</source>
 
<source langsyntaxhighlightlang="cpp-qt">
//MaFenetre.h
#ifndef DEF_MAFENETRE
#endif
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="cpp-qt">
//MaFenetre.cpp
#include "MaFenetre.h"
QObject::connect(m_bouton, SIGNAL(clicked()), qApp, SLOT(quit()));
}
</syntaxhighlight>
</source>
 
Exécutons la commande <code>qmake</code>, puis testons notre code. Une fenêtre s'ouvre.
 
Voici le code:
<sourcesyntaxhighlight lang="cpp-qt">
//MaFenetre.h
#ifndef DEF_MAFENETRE
#endif
</syntaxhighlight>
</source>
 
<sourcesyntaxhighlight lang="cpp-qt">
#include "MaFenetre.h"
QObject::connect(m_aPropos, SIGNAL(clicked()), qApp, SLOT(aboutQt()));
}
</syntaxhighlight>
</source>
 
On compile maintenant, et le bouton "Quitter" ferme toujours l'application. Quant à "À propos", il provoque l'ouverture de la fenêtre "À propos de Qt".