QT定时器的两种应用(QObject就有timerEvent事件,一种什么样的居心呢?)

QT中定时器的使用方法
(1)重载timerEvent(QTimerEvent *)函数,然后再在类的构造函数中设置时间间隔
   startTimer(50);//单位为毫秒
(2)在类的构造函数中设定如下:
   QTimer *timer=new QTimer(this);
   connect(timer,SIGNAL(timeout()),this,SLOT(timeoutslot()));//timeoutslot()为自定义槽
   timer->start(1000);

QT定时器的两种应用

2009-10-14 8:44

可以用槽函数实现

(1)重载timerEvent(QTimerEvent *)函数,然后再在类的构造函数中设置时间间隔
startTimer(50);//单位为毫秒
(2)在类的构造函数中设定如下:

  1. QTimer *timer=new QTimer(this);
  2. connect(timer,SIGNAL(timeout()),this,SLOT(timeoutslot()));//timeoutslot()为自定义槽
  3. timer->start(1000);

[c++] view plaincopy

  1. QTimer *timer=new QTimer(this);
  2. connect(timer,SIGNAL(timeout()),this,SLOT(timeoutslot()));//timeoutslot()为自定义槽
  3. timer->start(1000);

然而:所有Qobject的子类在设置定时器时都不必加载一个Qtimer对象,因为这样造成了资源浪费且需要书写多余的函数,很不方便.最好的办法是重载timerEvent函数,具体写法如下:

  1. class Gui_DlgViewCtrlDatum : public QDialog
  2. {
  3. Q_OBJECT
  4. public:
  5. Gui_DlgViewCtrlDatum( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
  6. ~Gui_DlgViewCtrlDatum();
  7. protected:
  8. void timerEvent( QTimerEvent * );
  9. };
  10. void Gui_DlgViewCtrlDatum::timerEvent( QTimerEvent *e )
  11. {
  12. //statements
  13. }

[c++] view plaincopy

  1. class Gui_DlgViewCtrlDatum : public QDialog
  2. {
  3. Q_OBJECT
  4. public:
  5. Gui_DlgViewCtrlDatum( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
  6. ~Gui_DlgViewCtrlDatum();
  7. protected:
  8. void timerEvent( QTimerEvent * );
  9. };
  10. void Gui_DlgViewCtrlDatum::timerEvent( QTimerEvent *e )
  11. {
  12. //statements
  13. }

再在Gui_DlgViewCtrlDatum的构造函数中设置时间间隔:
startTimer(50);//单位为毫秒

这样,每隔50毫秒,函数timerEvent便会被调用一次.

网上又说:

定时器事件的优先级很低,如果需要多个定时器,那么跟踪每一个定时器的ID是很费时的。这种情况下,较好的方法是为每一个定时器创建一个QTimer对象。在每一个时间间隔内,QTimer发出一个timeout()信号。QTimer还支持一次性定时器(只发出一次timeout()信号的定时器)。

http://blog.csdn.net/u013394556/article/details/42775213

时间: 2024-10-25 23:54:49

QT定时器的两种应用(QObject就有timerEvent事件,一种什么样的居心呢?)的相关文章

Qt分析:Qt中的两种定时器(可是QObject为什么要提高定时器呢,没必要啊。。。)

Qt有两种定时器,一种是QObject类的定时器,另一种是QTimer类的定时器. (1)QObject类的定时器 QObject类提供了一个基本的定时器,通过函数startTimer()来启动,通过killTimer()来结束,通过QTimerEvent来处理定时器事件. int startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer); void killTimer(int id); void QObject::t

spring 定时器执行两次

spring错误笔记 spring定时器执行两次因为导入了两次 关于配置文件如下 <bean id="timeTaskService" class="xx.xxx.xxx.xxx.service.impl.na.TimeTaskService"/> <task:scheduled-tasks scheduler="myScheduler"><!--30秒执行一次 --> <task:scheduled r

两种 eratosthenes 筛法的时间比较,第二种快很多会比较好用

#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; const int maxn = 10000005; int vis[maxn]; int n; //int eratosthenes() //{ //    memset(vis,0,sizeof(vis)); //    for(int i=2;i<=n;i++) /

vue中触发键盘事件的两种方法和如何自定义键位事件,完整代码!

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" con

Windows五种IO模型性能分析和Linux五种IO模型性能分析

Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blog.csdn.net/jay900323/article/details/18140847 重叠I/O模型的另外几个优点在于,微软针对重叠I/O模型提供了一些特有的扩展函数.当使用重叠I/O模型时,可以选择使用不同的完成通知方式. 采用事件对象通知的重叠I/O模型是不可伸缩的,因为针对发出WSAWa

三种项目风险管理手段,你常用哪种

风险管理手段,虽然有三种,但是根据实际情况,或许你常用的风险管理手段也就是一种.因为很多时候,相似的项目工程,遇到的风险有很多一部分类似.还有一个原因就是,人们习惯于应用自己熟悉的手段来处理问题.因为这样子更省事,风险也更小.实际情况是不是这样呢?这个很难一概而论.但是,每一个风险管理手段都有其使用的条件.那一种项目风险管理手段更适合您的项目,要根据条件而定.下面三种项目风险管理手段,你常用哪种?选择其他手段,是否更合适呢?带着问题,看看下文吧. 当前的项目风险处理手段主要包括风险控制.风险自留

(转)NGUI研究院之三种方式监听NGUI的事件方法

NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不灵活. 1 2 3 4 void OnClick() { Debug.Log("Button is Click!!!"); }   2.使用SendMessage 选择按钮后,在Unity导航菜单栏中选择Component->Interaction->Button Messag

JS 父页面调子页面(2种情况),子掉父级(1种)(转)

A :父级调用子级页面 ,非IFRAME情况,类似平级: window.open("子页面.html", "", "width=1024,height=768"); window.opener.子页面函数名字(); B : 父级调用子级页面 ,IFRAME情况 window.frames["iframe名字"].子页面的函数(); C: 子级调用父级就简单了 window.parent.getIdsChangeCate(ids

关于数据同步的几种实现第五种基于软件应用程序进行同步(前四种基于数据库级,第四种做集群一主多从。)

之前网络上收集到的一些关于数据同步的资料 一通过发布/订阅的方式实现同步 发布/订阅是Sql Server自带的一种数据库备份的机制,通过该机制可以快速的实现数据的备份同步,不用编写任何的代码. 此种数据同步的方式存在的以下的一些问题: 表结构不能更改,同步双方的表结构必须一致,一旦表结构发生更改需要重新生成数据库快照. 对于大数据量的同步没有可靠的保证. 网络不稳定的情况下同步也不能保证. 总的来说,这种数据备份同步的方式,在表结构一致.数据量不是特别大的情况下还是非常高效的一种同步方式. 二