下面介绍设计计时器的两种方法,分别是利用信号与槽来使用计时器,利用计时器事件来使用计时器。
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对象调用计时器处理函数来处理该计时器事件。
总结:
感觉还是第一种方法信号与槽好用。