QT中怎么设置定时器/周期任务/定时触发任务
创始人
2024-03-17 21:17:54

Qt中定时器的使用有两种方法,一种是使用QObject类提供的定时器,还有一种就是使用QTimer类。

其精确度一般依赖于操作系统和硬件,但一般支持20ms。下面将分别介绍两种方法来使用定时器。

QObject类提供的定时器

QObject中的定时器的使用,需要用到三个函数

1、 int QObject::startTimer ( int interval ) ;

​ 这个是开启一个定时器的函数,他的参数interval是毫秒级别。当开启成功后会返回这个定时器的ID, 并且每隔interval 时间后会进入timerEvent 函数。直到定时器被杀死。

2、 void QObject::timerEvent ( QTimerEvent * event );

当定时器超时后,会进入该事件timerEvent函数,需要重写timerEvent函数,在函数中通过判断event->timerId()来确定定时器,然后执行某个定时器的超时函数。

3、 void QObject::killTimer ( int id );

​ 通过从startTimer返回的ID传入killTimer 函数中杀死定时器,结束定时器进入超时处理。

以下是QObject中的定时器具体使用简单例子:

先新建一个控制台项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-abaXM1UX-1670160150577)(/Users/apple/Library/Application Support/typora-user-images/image-20221204210606147.png)]

项目目录结构如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lP9yR5ha-1670160105452)(/Users/apple/Library/Application Support/typora-user-images/image-20221204210647875.png)]

其中main.cpp

#include 
#include "mytimer.h"”int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);MyTimer myTimer;return a.exec();
}

mytimer.h

#ifndef MYTIMER_H
#define MYTIMER_H
#include class MyTimer : public QObject
{Q_OBJECTpublic:MyTimer(QObject* parent = NULL);~MyTimer();void  handleTimeout();  //超时处理函数virtual void timerEvent( QTimerEvent *event);
private:int m_nTimerID;
};
#endif // MYTIMER_H

mytimer.cpp

#include "mytimer.h"#include
#include #define TIMER_TIMEOUT	(5*1000)MyTimer::MyTimer(QObject *parent):QObject(parent)
{m_nTimerID = this->startTimer(TIMER_TIMEOUT);
}MyTimer::~MyTimer()
{}void MyTimer::timerEvent(QTimerEvent *event)
{if(event->timerId() == m_nTimerID){handleTimeout();}
}void MyTimer::handleTimeout()
{qDebug()<<"Enter timeout processing function\n";//killTimer(m_nTimerID);//注意这句话,如果不注释掉,则只会执行一次
}

运行结果如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-otbFFUio-1670160105453)(/Users/apple/Library/Application Support/typora-user-images/image-20221204210958810.png)]

QTimer类提供的定时器

1、 首先创建一个定时器类的对象

QTimer *timer = new QTimer(this);

2、 timer 超时后会发出timeout()信号,所以在创建好定时器对象后给其建立信号与槽

connect(timer, SIGNAL(timeout()), this, SLOT(onTimeout()));

3、 在需要开启定时器的地方调用void QTimer::start ( int msec );

这个start函数参数也是毫秒级别;

timer->start(msec );

4、 在自己的超时槽函数里面做超时处理。

以下是QTimer定时器类具体使用简单例子:

和上面一样,新建一个控制台应用项目。

项目目录结构如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OrrCkwtS-1670160105457)(/Users/apple/Library/Application Support/typora-user-images/image-20221204211809589.png)]

其中main.cpp

#include 
#include "mytimer.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);MyTimer mytimer;return a.exec();
}

mytimer.h

#ifndef _MYTIMER_H
#define _MYTIMER_H#include 
class QTimer;
class MyTimer : public QObject
{Q_OBJECTpublic:MyTimer(QObject* parent = NULL);~MyTimer();
public slots:void handleTimeout();  //超时处理函数
private:QTimer *m_pTimer;
};#endif //_MYTIMER_H

mytimer.cpp

#include "mytimer.h"#include
#include #define TIMER_TIMEOUT	(5*1000)MyTimer::MyTimer(QObject *parent):QObject(parent)
{m_pTimer = new QTimer(this);connect(m_pTimer, SIGNAL(timeout()), this, SLOT(handleTimeout()));m_pTimer->start(TIMER_TIMEOUT);
}MyTimer::~MyTimer()
{}void MyTimer::handleTimeout()
{qDebug()<<"Enter timeout processing function\n";
//    if(m_pTimer->isActive()){//不注释这几句,超时处理函数只会处理一次
//        m_pTimer->stop();
//    }
}

运行结果如下

请添加图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...