public://定时器void timerEvent(QTimerEvent *);private:int id;
#include <QTimerEvent>
//QWidget 默认不追踪鼠标事件
mylabel::mylabel(QWidget *parent) : QLabel(parent)
{this->setMouseTracking(true);//启动定时器//参数1:触发定时器的时间,单位ms//参数2:使用默认值//返回值:定时器IDid = startTimer(100);//通过id来判断是哪一个定时器
}
//定时器
void mylabel::timerEvent(QTimerEvent *)
{static int num = 0;QString str = QString("%1,%2").arg("Time out").arg(num++);if(num == 100){//关闭定时器killTimer(id);}setText(str);
}
两个定时器实现
由于争抢同一个函数,因此会导致第一个定时器的显示被覆盖掉。
如果想要使用两个定时器,则需要在使用两个label,并且在创建一个类。
启动两个定时器,因此需要区分是哪一个定时器进到label
if(e->timerId() == id)
id = startTimer(100);//通过id来判断是哪一个定时器
id1 = startTimer(100);}
//定时器
void mylabel::timerEvent(QTimerEvent *e)
{QString str;//启动两个定时器,因此需要区分是哪一个定时器进到labelif(e->timerId() == id){static int num = 0;str = QString("%1,%2").arg("Time out").arg(num++);if(num >= 100){//关闭定时器killTimer(id);}}if(e->timerId() == id1){static int num1 = -100;str = QString("%1,%2").arg("Time out").arg(num1++);if(num1 >= 0){//关闭定时器killTimer(id1);}}setText(str);
}
可以很清楚的看到两个定时器在同时计时,因为在通过一个label中,所以相互覆盖。
两个定时器示例2(建议使用)
#include <QTimer>
//第二种定时器用法QTimer *timer = new QTimer(this);timer->start(100);connect(timer,&QTimer::timeout,this,[=](){static int number;number++;this->setText(QString::number(number));});QTimer *timer1 = new QTimer(this);timer1->start(100);connect(timer1,&QTimer::timeout,this,[=](){static int number=1000;number++;this->setText(QString::number(number));});
timer->stop();
-
记录在窗口中停留的事件
-
倒计时器