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::timerEvent(QTimerEvent * event);


startTimer(int interval)启动一个时间间隔为interval毫秒的定时器,返回一个定时器标识符,如果未能启动成功,则返回0。

该定时器只能使用killTime()来杀死,killTimer(int id)通过定时器标识符来杀死定时器。

如果有多个定时器,可以通过QTimerEvent::timerId()来获取已经启动的定时器标识符。

(2)QTimer类的定时器

QTimer类定时器是QObject类定时器的扩展版或者说升级版,因为它可以提供更多的功能。比如说,它支持单次触发和多次触发。

使用QTimer类定时器的步骤:

(1)创建一个QTimer定时器实例:QTimer *timer = new QTimer(this);

(2)连接超时信号与槽:connect(timer, SIGNAL(timeout()), this, SLOT(testFunc()));

(3)启动定时器start();

(4)适时关闭定时器:stop();

(5)删除定时器实例:delete timer;



公共函数:

int               interval() const                                            获得定时器时间间隔

bool              isActive() const                                         获得定时器激活状态

bool              isSingleShot() const                                 获得单次触发使能状态

int               remainingTime() const                              获得距离触发定时器事件的剩余时间

void              setInterval(int msec)                                设置定时器时间间隔

void              setSingleShot(bool singleShot)              设置使能/禁用单次触发

void              setTimerType(Qt::TimerType atype)        设置定时器类型

int               timerId() const                                           获得定时器标识符

Qt::TimerType     timerType() const                             获得定时器类型

公共槽函数:

void     start(int msec)                             启动定时时间间隔为msec毫秒的定时器
void     start()                                           启动定时器
void     stop()                                           暂停定时器

信号:

void     timeout()                                    超时

http://blog.csdn.net/jan5_reyn/article/details/38955719

时间: 2024-08-01 19:33:55

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

iOS中的两种主要架构及其优缺点

凡是程序的开发者,应该对程序的架构都不陌生.一个程序的架构的好坏对这个程序有着非常重要的作用.今天我们来看一下iOS开发中用要的两种主流的程序架构.这个过程中我们主要以例子的形式展开. 我们来看第一种架构:如下图所示: 这种程序的架构主要原理是创建了一个导航控制器来控制页面之间的切换.这种架构一般把主界面作为导航控制器的根视图控制器.在上图所求的程序架构中,主界面管理了四个界面:微信界面,发现界面,联系人界面,关于我界面.如果程序是第一次运行的时候,进入用户指引界面,然后进入登录界面,输入账户名

Linux中的两种link方式

Linux系统中包括两种链接方式:硬链接(hard link)和符号链接(symbolic link),其中符合链接就是所谓的软链接(soft link),那么两者之间到底有什么区别呢? inode 在Linux系统中,内核为每一个新创建的文件分配一个inode,每个文件都有一个惟一的inode,这里将inode简单理解成一个指针,它永远指向本文件的具体存储位置同时,文件属性保存在inode里,比如owner等.在访问文件时,inode被复制到内存,从而实现文件的快速访问.系统是通过inode来

MySQL中的两种临时表

MySQL中的两种临时表 伯乐在线2016-07-06 05:16:52阅读(4556)评论(3) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 外部临时表 通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表.这种临时表只对当前用户可见,当前会话结束的时候,该临时表会自动关闭.这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除). 内部临时表 内部临时表是一种特殊轻量级

JavaScript中的两种事件流

JavaScript中的两种事件流 事件流描述的是从页面中接收事件的顺序.提出事件流概念的正是IE和Netscape,但是前者提出的是我们常用的事件冒泡流,而后者提出的是事件捕获流. 第一部分:事件冒泡 即事件开始由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档). 下面举一个简单的例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"&

Hibeernate中的两种分页方式

1. return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session s) throws HibernateException { Criteria c = s.createCriteria(AskOnline.class); c.add(Restrictions.eq("boardid", new Long(bid))); c.setFirs

ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT is SELECT ID,UNAME from g_users where utype=2 and STATUS>-1; begin for c in TABLE_DEPT loop INSERT INTO G_KNOWDOCRIGHT(RID,DIRID,DOCID,USERID) VALUES(SYS

eclipse中的两种Jre 及 Jre与Jdk的区别

分类: ——————————区分eclipse中的两种Jre———————- (Eclipse也是一个普通的Java程序,因此必须有一个JRE做为运行环境.如果你的机器上没有安装任何JRE(或者JDK,本文不做二者的区分),那么点击eclipse.exe就会报错说找不到JRE.此时可以安装一个JRE.或者直接把JRE目录拷贝到eclipse安装目录下. 在Eclipse的每个项目中可以为项目指定不同的JRE版本,比如A项目使用JDK1.4编译,B项目使用JDK1.5编译.这个JDK版本是和Ecl

R语言绘图技巧:在同一张中使用两种不同尺度

写文章过程中遇到了这个绘图问题,需要在曼哈顿图上添加多样性曲线,两者的尺度差别比较大,直接用lines函数进行添加,效果悲剧.强行将尺度差距大的两者画在同一图中,效果大概就是下面这个样子. 这个图不容易看出数据的比较差异来.为解决这个问题,可使用R plotrix包里的twood.plot函数,在同一张图中使用两种不同的尺度,函数描述如下: 使用这个函数之后,再来画图: 无视色彩搭配和审美问题,至少比前面的图要直观一些了,两种信息的联系也能看的比较清晰. 最后放上代码~~~ ##########

validate插件:验证密码没有空格 用户名是5-10位 至少包含数字和大小写字母中的两种字符

//校验密码是否含有空格 jQuery.validator.addMethod("notblank", function(value, element) { var pwdblank = /^\S*$/; return this.optional(element) ||(pwdblank.test(value)); }, "密码不可包含空格"); //用户名必须需包含数字和大小写字母中至少两种 jQuery.validator.addMethod("use

Crystal Report在.net中的两种显示方式

原文:Crystal Report在.net中的两种显示方式 编写人:CC阿爸 2014-7-29 近来在完成深圳一公司的项目,对方对各方面要求相当严格,一不满意就拒绝签收,为了对修正水晶报表显示及导出的一些小问题,无赖之下,仔细了解一下水晶报表的操作方法,逼苦我们这些苦逼的程序,虽说在以前的项目中,也常使用crystal report 来制作报表.并且针对web与winform 都各有不同的地方. 但总的来讲:显示水晶报表目前使用控件对象的有两种显示方式 1.      使用crystalRe