QT定时器的使用

方法一

使用 t i m e r E v e n t timerEvent timerEvent

[override virtual protected] void QTimer::timerEvent(QTimerEvent *e)

所以只需要在 W i d g e t . h Widget.h Widget.h里声明一下,然后去 W i d g e t . c p p Widget.cpp Widget.cpp实现即可

具体的操作写在函数 t i m e E v e n t timeEvent timeEvent中

但是怎么触发时间呢??我们需要激活一下,也就是

s t a r t T i m e r ( x ) startTimer(x) startTimer(x)

其中 x x x表示间隔 x   m s x\ ms x ms触发一次

然后 s t a r t T i m e r startTimer startTimer会返回一个 i n t int int类型的数,根据这个可以判断当前是哪个定时器

比如下面,实现了在 L a b e l Label Label中不停增长数字

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    id1 = startTimer(100);
    id2 = startTimer(1000);
}


void Widget::timerEvent(QTimerEvent *e)
{
    if( e->timerId()==id1 )
    {
        static int num1 = 1;
        ui->label_1->setText(QString::number(num1++));
    }
    if( e->timerId()==id2 )
    {
        static int num2 = 1;
        ui->label_2->setText(QString::number(num2++));
    }
}

Widget::~Widget()
{
    delete ui;
}


方法二

使用类 Q T i m e r QTimer QTimer实例对象,靠发射信号来写

    ui->setupUi(this);
    QTimer *timer1 = new QTimer(this);
    timer1->start(100);
    connect(timer1,&QTimer::timeout,
    [=]()
    {
        ui->label_1->setText(QString::number(id1++));
    }
            );
    QTimer *timer2 = new QTimer(this);
    timer2->start(1000);
    connect(timer2,&QTimer::timeout,
    [=]()
    {
        ui->label_2->setText(QString::number(id2++));
    }
            );

逻辑更加清晰

现在继续设置一个按钮,按下就停止计数

其实还是使用信号来写,用类 s t o p stop stop一下就好了

    connect(ui->Btn1,&QPushButton::clicked,[=]()
    {
        timer2->stop();
    }
            );
上一篇:Qt定时器:QTimer和timerEvent


下一篇:Qt定时器QTimer的基本使用(二)(补充和示例)