下面介绍设计计时器的两种方法,分别是利用信号与槽来使用计时器,利用计时器事件来使用计时器。
1. 利用信号与槽来使用计时器
//方法一(利用信号与槽来使用计时器):QTimer *timer = new QTimer(this);timer->start(1000);//周期,计时器每隔一个周期就会发出一个timeout信号;//每当计时器发出timeout信号时,就会触发槽;connect(timer, &QTimer::timeout, this, [&]{static int num = 0;ui->label->setText(QString::number(num++));});
使用Timer动态生成的计时器,每到周期就会发出一个timeout信号。
2.利用计时器事件来使用计时器
//在widget.h文件下,设置两个计时器的id
private:int time_id1;int time_id2;//在widget.cpp文件的widget构造函数中//方法二(利用计时器事件来使用计时器):time_id1 = startTimer(500);//周期为500,时间到就会触发计时器事件;time_id2 = startTimer(2000);//第二个计时器,周期为2000ms;//计时器事件处理函数void Widget::timerEvent(QTimerEvent *e)
{if(e->timerId() == time_id1)//如果是1号计时器{static int num1 = 0;ui->label_2->setText(QString::number(num1++));}else if(e->timerId() == time_id2)//如果是二号计时器{static int num2 = 0;ui->label_3->setText(QString::number(num2++));}
}
使用startTimer生成的计时器会在周期结束后发出计时器事件,widget对象调用计时器处理函数来处理该计时器事件。
总结:
感觉还是第一种方法信号与槽好用。