public:
//定时器
void timerEvent(QTimerEvent *);
private:
int id;
#include <QTimerEvent>
//QWidget 默认不追踪鼠标事件
mylabel::mylabel(QWidget *parent) : QLabel(parent)
{
this->setMouseTracking(true);
//启动定时器
//参数1:触发定时器的时间,单位ms
//参数2:使用默认值
//返回值:定时器ID
id = 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;
//启动两个定时器,因此需要区分是哪一个定时器进到label
if(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();
-
记录在窗口中停留的事件
-
倒计时器