Qt笔记(十)之定时器的使用

104 篇文章 126 订阅

一.前言
软件开发中,会遇到要相隔一段时间更新数值或者去读取下位机数据的情况,这个时候就需要用到定时器来实现该需求了,然后查看了文档,发现了Qt的提供定时器有两种,一是QTimer类的定时器,二是QObject类的定时器,两种都是毫秒级的定时器

二.QTimer类的实现过程
2.1实现步骤
(1)创建一个QTimer定时实例
(2)连接超时信号与槽
(3)启动定时器
(4)根据是需要关闭定时器stop()
(5)删除定时器实例

2.2核心代码

void Widget::on_pushButton_2_clicked()
{
    timer = new QTimer();
    connect(timer,SIGNAL(timeout()),this,SLOT(onTimerout()));
    timer->start(1000);
}

void Widget::onTimerout()
{
    qDebug()<<"---------时间到了执行操作--------------";
    for(int i=0;i<5;i++)
    {
        qDebug()<<i;
    }
    qDebug()<<"操作执行完毕,关闭定时器";
    timer->stop();
    delete timer;
    timer=nullptr;
}

2.3效果
在这里插入图片描述
三.QObject类的定时器的实现过程
3.1注意:.此类继承于QObject(一般来说都是会继承这个类,这个Qt的顶级类,如果不确定就按住ctrl+鼠标左键一层一层查看),才可以直接调用函数startTimer,该函数会开启一个定时器,但是只会返回该定时器的的编号,我们无法获取定时器对象,所以也就无法使用信号槽机制了,只能通过重载定时器事件来处理函数
3.2实现过程
(1)开启定时器,记录定时器ID
(2)重载定时器事件捕获对应的ID来进行对应的逻辑操作
(3)根据需要使用killTimer(timerID)来结束定时器
3.3核心代码

void Widget::on_pushButton_1_clicked()
{
    // 根据帮助文档,startTimer启动成功会返回定时器ID,不成功会返回0
    // startTimer 只需要填定时毫秒数即可,第二个参数控制的是精确程度,默认一般精确,可根据需要填写
    timerID= this->startTimer(1000);
    if(timerID>0)
    {
        qDebug()<<"定时器启动成功:"<<timerID;
    }
    else
    {
        qDebug()<<"定时器启动失败:"<<timerID;
    }
}

void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId()==timerID)
    {
        qDebug()<<"找到对应的ID";
        for(int i=5;i<10;i++)
        {
            qDebug()<<i;
        }
        killTimer(timerID);
    }
}

3.4效果预览
在这里插入图片描述
四.源码下载

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值