在Qt中会用到定时器事件,若是仅仅只用到一个定时器的画那就十分简单,只需要添加个定时器事件,总的来说就是调用Widget的成员函数,同时设置一个int型的静态变量,让这个数字不断累加,值得注意的是对label进行操作时,输入的文本信息用从int转为string型。代码如下
startTimer(1000);//单位是 毫秒
//添加定时器事件
void Widget::timerEvent(QTimerEvent *e)
{
//每隔一秒 让label_2数字++
static int num = 1;
ui->label_2->setText(QString::number(num++));
}
但若是需要有两个以上的定时器就不能按照上述方法了,因为无法知道判断让对应的定时器执行对应的事件。这就需要利用startTimer函数的返回值作为定时器的唯一标识,利用此标识和QTimerEvent中的函数返回值进行对比即可判断定时器是否对应到了准确的事件,代码如下
//开启定时器
id1 = startTimer(1000);//单位是 毫秒
id2 = startTimer(2000);//单位是 毫秒
//添加定时器事件
void Widget::timerEvent(QTimerEvent *e)
{
//每隔一秒 让label_2数字++
if(e->timerId() == id1)
{
static int num = 1;
ui->label_2->setText(QString::number(num++));
}
//每隔2秒 让label_3 数字++
if(e->timerId() == id2)
{
static int num2 = 1;
ui->label_3->setText(QString::number(num2++));
}
}
另外一种方法也是最值得推荐的,通过创建一个定时器对象,这种好处就是需要多少个定时器就new多少个,不用去验证定时器的唯一标识
//创建定时器对象
QTimer * timer1 = new QTimer(this);
timer1->start(500);
//每隔0.5秒 会抛出一个信号
connect(timer1,&QTimer::timeout,[=](){
//每隔0.5秒 让label_4数字++
static int num = 1;
ui->label_4->setText(QString::number(num++));
});