Timer

La gestion du temps dans une application est gérée par des temporisateurs appelés TIMER.

Dans QT la bibliothèque QTimer permet de mettre en oeuvre ces composants bien pratiques dans de nombreuses situations :

      • fermer une fenêtre après une temps
      • lancer des opérations de manière répétitive
      • etc....

QTimer

On l'aura compris QTimer repose sur les signaux générés et qui permettent de déclencher des procédures liées à des SLOT.


Déclaration

La première chose à faire dans un programme est bien sûr d'inclure la bibliothèque QTimer  dans le header:


#include <QTimer>

Le Timer doit être accessible dans toute l'application il est est donc préférable de le déclarer dans la class de la fenêtre principale. Il sera déclaré comme pointeur afin de pouvoir le créer dans le code.

class MainWindow : public QMainWindow

{

    Q_OBJECT

   

public:

    explicit MainWindow(QWidget *parent = 0);

    ~MainWindow();

    QTimer *monTimer;

............


signals :

..............

public slots :

    void finTempo();

..........................

   

private:

    Ui::MainWindow *ui;


};


Le timer va déclencher un slot (ici finTempo) qui va réaliser une action au bout du temps de temporisation.


Création

Dans le constructeur de l'application, il faut dans un premier temps créer le timer avec la méthode new.

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{//constructeur

    ui->setupUi(this);

    .......................

 monTimer=new QTimer();

     QObject::connect(monTimer, SIGNAL(timeout()), this,SLOT(finTempo()));

}

SLOT

La méthode connect permet de lier le signal timeout() au slot finTempo.

Voir le paragraphe détaillant les SLOT.


La procedure liée au SLOT décrit le comportement ou les opérations à exécuter après la temporisation.


void MainWindow::finTempo()

{

 //mon code après la temporisation

}

Démarrer la temporisation

singleShot

En mode singleShot, le timer s'arrête après le temps défini par la méthode start, et il faut le relancer pour démarrer une nouvelle temporisation. Il s'agit de la situation la plus courante.

les deux lignes suivantes doivent être placées à l'endroit du programme où la temporisation doit démarrer.

         monTimer->setSingleShot(true); //active le mode singleShot

         monTimer->start(15000); //démarre une tempo de 15 secondes