【QT】定时器事件应用

 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();
  1. 记录在窗口中停留的事件

  2. 倒计时器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值