【QT】定时器

1 第一种方式

(1)利用事件 void timerEvent ( QTimerEvent * ev)
(2)启动定时器 startTimer( 1000) 毫秒单位
(3)timerEvent 的返回值是定时器的唯一标示 可以和ev->timerid 做比较

需求:设置两个定时器,时间不一样。

(1)首先是重写timerEvent函数

【QT】定时器_第1张图片

这里加上UI的label控件

【QT】定时器_第2张图片

 重写

// 定时器事件
void Widget::timerEvent(QTimerEvent *event) {
    if (event->timerId() == this->m_Id1) {
        static int num = 1;
        ui->label->setText(QString::number(num++));
    } else if (event->timerId() == this->m_Id2){
        static int num2 = 1;
        ui->label_2->setText(QString::number(num2++));
    }

}

(2)因为是两个定时器,在类中加入成员属性,各表示两个定时器的返回值

【QT】定时器_第3张图片

(3)启动两个定时器

// 启动定时器
this->m_Id1 = startTimer(1000);     // 毫秒级

this->m_Id2 = startTimer(2000);

(4)效果

【QT】定时器_第4张图片

2 第二种方式

定时器类

// 定时器类
QTimer* timer = new QTimer(this);
timer->start(500);       // 单位是毫秒
// 监听定时器对象的信号
connect(timer, &QTimer::timeout, this, [=](){
    static int num3 = 1;
    ui->label_3->setText(QString::number(num3++));
});

效果

【QT】定时器_第5张图片

扩充,点击暂停按钮,定时器暂停

添加QPushbutton按钮,使用connect做连接

// 点击暂停,实现停止
connect(ui->btn_pause, &QPushButton::clicked, this, [=](){
    timer->stop();
});

效果

【QT】定时器_第6张图片

你可能感兴趣的:(QT,qt,定时器)