Utilisation simple d'un objet QTimer

Question

Créez un projet nommé appTimer disposant d'une IHM contenant :

IHM

Type d'élément

Nom dans le code

Info

Bouton

pbSS

Bouton start/stop du timer

Nombre LCD

lcdNumber

Affichage d'un nombre imitation LCD

Ligne de texte

leInterval

Réglage de l'intervalle du timer

et permettant :

  • De déclencher le timer lors de l'appui sur le bouton pbSS. Attention, le bouton ne peut être actif que si une durée cohérente (>500ms) est présente dans la ligne de texte.

  • Le bouton pbSS est une bascule et se transforme en bouton stop pour arrêter le timer.

  • Il n'est possible de changer l'intervalle du timer que s'il est arrêté.

Indice

Pour faire un bouton à bascule, servez vous du texte affiché dans le bouton pour connaître son état.

Pour activer ou désactiver un élément graphique, il existe la méthode setEnabled(bool) . Le paramètre est true pour activer l'élément ou false pour le désactiver. Il reste visible.

Exemple de l'IHM de appTimer

Solution

Fichier capptimer.h

Par défaut, la classe Mainwindow gère la fenêtre d'IHM principale. Nous la renommons pour l'appeler CAppTimer. Ce n'est pas obligatoire.

1
#ifndef CAPPTIMER_H
2
#define CAPPTIMER_H
3
4
#include <QMainWindow>
5
#include <QTimer>
6
7
namespace Ui {
8
class CAppTimer;
9
}
10
11
class CAppTimer : public QMainWindow
12
{
13
    Q_OBJECT
14
15
public:
16
    explicit CAppTimer(QWidget *parent = 0);
17
    ~CAppTimer();
18
19
private:
20
    Ui::CAppTimer *ui;
21
    QTimer *timer;
22
    double cpt;
23
24
private slots:
25
    void onTimeout();
26
    void on_pbSS_clicked();
27
};
28
29
#endif // CAPPTIMER_H
30
Le fichier capptimer.cpp
1
#include "capptimer.h"
2
#include "ui_capptimer.h"
3
4
CAppTimer::CAppTimer(QWidget *parent) :
5
    QMainWindow(parent),
6
    ui(new Ui::CAppTimer)
7
{
8
    ui->setupUi(this);
9
    timer = new QTimer(this);
10
    timer->setInterval(1000);
11
    connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
12
    cpt = 0;
13
}
14
15
CAppTimer::~CAppTimer()
16
{
17
    delete timer;
18
    delete ui;
19
}
20
21
void CAppTimer::onTimeout()
22
{
23
    cpt++;
24
    ui->lcdNumber->display(cpt);
25
}
26
27
void CAppTimer::on_pbSS_clicked()
28
{
29
    if (ui->pbSS->text() == "Start") {
30
        timer->start(ui->leInterval->text().toInt());
31
        ui->leInterval->setEnabled(false);
32
        ui->pbSS->setText("Stop");
33
    } else {
34
        timer->stop();
35
        ui->leInterval->setEnabled(true);
36
        ui->pbSS->setText("Start");
37
    } // else
38
}
39