[转]Qt中定时器使用的两种方法
Qt中定时器的使用有两种方法,一种是使用QObject类提供的定时器,还有一种就是使用QTimer类。
其精确度一般依赖于操作系统和硬件,但一般支持20ms。下面将分别介绍两种方法来使用定时器。
方法一: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中的定时器具体使用简单例子:
#define _MYTIMER_H #include <QObject> class MyTimer : public QObject
{
Q_OBJECT public:
MyTimer(QObject* parent = NULL);
~MyTimer();
void handleTimeout(); //超时处理函数
virtual void timerEvent( QTimerEvent *event);
private:
int m_nTimerID;
}; #endif //_MYTIMER_H
#include "mytimer.h" #include<QDebug>
#include <QTimerEvent> #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);
}
方法二:使用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定时器类具体使用简单例子:
#ifndef _MYTIMER_H
#define _MYTIMER_H #include <QObject>
class QTimer;
class MyTimer : public QObject
{
Q_OBJECT public:
MyTimer(QObject* parent = NULL);
~MyTimer();
public slots:
void handleTimeout(); //超时处理函数
private:
QTimer *m_pTimer;
}; #endif //_MYTIMER_H
#include "mytimer.h" #include<QDebug>
#include <QTimer> #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();
}
}
---------------------
作者:奋斗Andy
来源:CSDN
原文:Qt中定时器使用的两种方法
版权声明:本文为博主原创文章,转载请附上博文链接!
[转]Qt中定时器使用的两种方法的更多相关文章
- php获取数组中重复数据的两种方法
分享下php获取数组中重复数据的两种方法. 1,利用php提供的函数,array_unique和array_diff_assoc来实现 <?php function FetchRepeatMem ...
- python中执行shell的两种方法总结
这篇文章主要介绍了python中执行shell的两种方法,有两种方法可以在Python中执行SHELL程序,方法一是使用Python的commands包,方法二则是使用subprocess包,这两个包 ...
- vue中使用echarts的两种方法
在vue中使用echarts有两种方法一.第一种方法1.通过npm获取echarts npm install echarts --save 2.在vue项目中引入echarts 在 main.js 中 ...
- PyQt(Python+Qt)学习随笔:model/view架构中支持QListView列表中展示图标的两种方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QListView列表视图中的项不但可以展示文字,也可以展示图标和复选框,同时可以指定项是否可以拖 ...
- 在C++中定义常量的两种方法的比较
常量是定以后,在程序运行中不能被改变的标识符.C++中定义常量可以用#define .const 这两种方法.例如:#define PRICE 10 //定义单价常量10const int PRICE ...
- Ajax中解析Json的两种方法详解
eval(); //此方法不推荐 JSON.parse(); //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name&qu ...
- MySQL中删除数据的两种方法
转自:http://blog.csdn.net/apache6/article/details/2778878 1. 在MySQL中有两种方法可以删除数据: 一种是delete语句,另一种是trunc ...
- Endnote在latex中的应用的两种方法
从endnote中向latex文档批量插入参考文献的两种方法 一.若是latex模板中参考文献编写的命令是: \begin{thebibliography} \bibitem{lab1}LIU M L ...
- Ajax中解析Json的两种方法
eval(); //此方法不推荐 JSON.parse(); //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name" ...
随机推荐
- 关于Unsupported major.minor version 52.0解决办法(再次回顾)
对于web项目的配置问题,在很大程度上,tomcat的版本问题起到很大的决定性因素,例如以上问题:Unsupported major.minor version 52.0 表示stanford par ...
- log4j.appender.file.DatePattern
DailyRollingFileAppender是日志记录软件包Log4J中的一个Appender,它能够按一定的频度滚动日志记录文件. 我们可以按下面的方式配置DailyRollingFileApp ...
- 【常用配置】Hadoop-2.6.5在Ubuntu14.04下的伪分布式配置
core-site.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet t ...
- canvas离屏技术与放大镜实现
教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)canvas 离屏技术与放大镜实现. 更多讨论或者错误提交,也请移步. 利用canvas除了可以实现 ...
- c语言学习笔记-break
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.break使用中的注意事项 1.break如果用于循环,用来终止循环. 2.break如果用于switch,则用于终止swi ...
- JqGrid: Add,Edit,Del in asp.net
https://github.com/1rosehip/jplist https://github.com/free-jqgrid/jqGrid https://plugins.jquery.com/ ...
- java.io.IOException No space left on device
磁盘空间不足 1.df -k,发现程序所在的工作目录/data,居然到了100%. 1604050 free allocated Kb 535144219 used allocated Kb 100 ...
- [VUE ERROR] Error in render: "TypeError: Cannot create property 'header' on boolean 'true'"
项目基于ElemnetUi进行的开发,在引入第三方扩展库 vue-element-extends 之后使用它的表格组件报了这个错 解决方案: 1. 删除项目中的 node_modules 2. 删除 ...
- HBase中此类异常解决记录org.apache.hadoop.ipc.RemoteException(java.io.IOException):
ERROR: Can't get master address from ZooKeeper; znode data == null 一定注意这只是问题的第一层表象,真的问题是: File /hb ...
- JMeter—配置元件(七)
参考<全栈性能测试修炼宝典JMeter实战>第六章 JMeter 元件详解中第二节配置元件JMeter配置元件可以用来初始化默认值和变量,以便后续采样器使用.将在其作用域的初始化阶段处理. ...