Utilisation de l'objet QTimer pour effectuer des actions à intervalle régulier.
QTimer
est la classe Qt permettant d'exécuter des instructions à intervalle régulier.
La propriété importante est interval
qui permet de définir l'intervalle de temps. Cette propriété est privée.
Il n'est donc possible de la définir que par un accesseur en écriture, la méthode setInterval()
par exemple.
Pour lancer le timer, la méthode start()
existe.
Pour l'arrêter, la méthode stop()
.
Une fois le timer lancé, à la fin de chaque intervalle de temps, l'objet émet le signal timeout()
.
Il suffit de connecter ce signal à un slot d'une classe de notre application.
Fondamental : Utilisation des classes Qt
Pour chaque utilisation des classes Qt, vous devez :
Vérifier dans la documentation s'il ne faut pas ajouter un module Qt dans le fichier de projet.
Dans tous les cas ajouter l'inclusion du fichier d'interface de la classe dans le fichier d'interface de la classe utilisatrice.
Exemple : Utilisation de QTimer
Ajouter au dessus de la définition de la classe (.h):
#include <QTimer>
Dans la définition de la classe (.h) :
private :
QTimer *timer ;
private slots :
void onTimeout() ;
Dans le constructeur (ou dans une autre méthode) de la classe :
timer = new QTimer(this);
timer->setInterval(1000); // 1000ms = 1s
connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
timer->start();
Dans le destructeur de la classe :
delete timer;
Dans le fichier .cpp de la classe :
void CAppTimer::onTimeout()
{
// choses à faire
}
Commentaires sur les instructions
Dans cet exemple, nous avons déclaré dans la classe un pointeur sur un timer.
Ce pointeur est initialisé dans le constructeur ou une autre méthode de la classe.
L'opérateur new
a permis l'instanciation ou création d'un objet timer pointé par la variable timer
.
Avec la méthode connect()
, nous avons demandé l'exécution du slot onTimeout()
créé dans la classe à chaque émission du signal timeout()
du timer.
Rappel : Pointeur sur un objet
En C/C++, lorsqu'on dispose d'un pointeur sur un objet créé dynamiquement (new
), l'accès aux attributs et méthodes de cet objet se fait par l'opérateur flèche (
).->
Lorsque l'instanciation est statique, l'opérateur est le point (.
).
Attention : Destruction d'un objet dynamique
Veillez à toujours provoquer l'effacement des objets créés dynamiquement, sans quoi, le système risque de manquer de mémoire.
Cela se fait le plus souvent dans le destructeur de la classe par le mot clef delete
.
Complément : Mot clef this en C++
Le mot clef C++ this
désigne l'objet en cours.