下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.分享到窗体顶端qt中定时器Timer的使用有两种方法实现定时器。第一种。自己建立关联。第二种。使用事件。(有点像单片机中的定时器啊)TAG: 定时器 Qt 有两种方法实现定时器。第一种。自己建立关联。1.新建Gui工程,工程名可以设置为timer。并在主界面上添加一个标签label,并设置其显示内容为“0000-00-00 00:00:00 星期日”。2.在mainwindow.h中添加槽函数声明。private slots:void timerUpDate();3.在mainwindow.cpp中添加代码。添加#include <QtCor
2、e>的头文件包含,这样就包含了QtCore下的所有文件。构造函数里添加代码:QTimer *timer = new QTimer(this);/新建定时器connect(timer,SIGNAL(timeout(),this,SLOT(timerUpDate();/关联定时器计满信号和相应的槽函数timer->start(1000);/定时器开始计时,其中1000表示1000ms即1秒4.然后实现更新函数。void MainWindow:timerUpDate()QDateTime time = QDateTime:currentDateTime();/获取系统现在的时间QStri
3、ng str = time.toString("yyyy-MM-dd hh:mm:ss dddd");/设置系统时间显示格式ui->label->setText(str);/在标签上显示时间5.运行程序,效果如下。第二种。使用事件。(有点像单片机中的定时器啊)1.新建工程。在窗口上添加两个标签。2.在main.cpp中添加代码,实现中文显示。#include <QTextCodec>QTextCodec:setCodecForTr(QTextCodec:codecForLocale();3.在mainwindow.h中添加代码。void timerE
4、vent(QTimerEvent *);4.在mainwindow.cpp中添加代码。添加头文件#include <QtCore>在构造函数里添加以下代码。startTimer(1000); /其返回值为1,即其timerId为1startTimer(5000);/其返回值为2,即其timerId为2startTimer(10000); /其返回值为3,即其timerId为3添加了三个定时器,它们的timerId分别为1,2,3。注意,第几个定时器的返回值就为几。所以要注意定时器顺序。在下面添加函数实现。void MainWindow:timerEvent(QTimerEvent
5、*t) /定时器事件switch(t->timerId() /判断定时器的句柄case 1 : ui->label->setText(tr("每秒产生一个随机数:%1").arg(qrand()%10);break;case 2 : ui->label_2->setText(tr("5秒后软件将关闭");break;case 3 : qApp->quit();break; /退出系统 这里添加了三个定时器,并都在定时器事件中判断它们,然后执行相应的功能。这样就不用每个定时器都写一个关联函数和槽函数了。
6、0; 随机数的实现:上面程序中的qrand(),可以产生随机数,qrand()%10可以产生0-9之间的随机数。要想产生100以内的随机数就%100。以此类推。但这样每次启动程序后,都按同一种顺序产生随机数。为了实现每次启动程序产生不同的初始值。我们可以使用qsrand(time(0);实现设置随机数的初值,而程序每次启动时time(0)返回的值都不同,这样就实现了产生不同初始值的功能。我们将qsrand(time(0);一句加入构造函数里。(buptyoyo) -在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器;一种是使用QTimer类。定时器的精确性依赖于操作系统
7、和硬件,大多数平台支持20ms的精确度。、QObject类的定时器QObject是所有Qt对象的基类,它提供了一个基本的定时器。通过QObject:startTimer(),可以把一个一毫秒为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整数定时器的标识符。这个定时器开始就会在每一个时间间隔"触发",直到明确的使用这个定时器的标识符来调用QObject:killTimer()结束。当定时器触发时,应用程序会发送一个QTimerEvent。在事件循环中,处理器按照事件队列的顺序来处理定时器事件。当处理器正忙于其它事件处理时,定时器就不能立即处理。QObject类还
8、提供定时期的功能。与定时器相关的成员函数有:startTimer()、timeEvent()、killTimer()。QObject基类中的startTimer()和timerEvent()原型及说明如下:int QObject:startTimer(int interval);开始一个定时器并返回定时器ID,如果不能开始一个定时器,将返回0。定时器开始后,每隔interval毫秒间隔将触发一次超时事件,直到killTimer()被调用来删除定时器。如果interval为0,那么定时器事件每次发生时没有窗口系统事件处理。virtual void QObject:timerEvent(QTime
9、rEvent *event);虚函数timerEvent()被重载来实现用户的超时事件处理函数。如果有多个定时器在运行,QTimerEvent:timerId()被用来查找指定定时器,对其进行操作。当定时器事件发生时,虚函数timerEvent()随着QTimerEvent事件参数类一起被调用,重载这个函数可以获得定时器事件。定时器的用法如下:/头文件class QNewObject : public QObjectQ_OBJECTpublic:QNewObject( QObject * parent = 0 );virtual QNewObject();protected:void time
10、rEvent( QTimerEvent *event );int m_nTimerId;/源文件QNewObject:QNewObject( QObject * parent ):QNewObject( parent )m_nTimerId = startTimer(1000);QNewObject:QNewObject()if ( m_nTimerId != 0 )killTimer(m_nTimerId);void QNewObject:timerEvent( QTimerEvent *event )qDebug( "timer event, id %d", event
11、->timerId() );定时器类QTimer定时器类QTimer提供当定时器触发的时候发射一个信号的定时器,他提供只触发一次的超时事件,通常的使用方法如下:/创建定时器QTimer *testTimer = new QTimer(this);/将定时器超时信号与槽(功能函数)联系起来connect( testTimer, SIGNAL(timeout(), this, SLOT(testFunction() );/开始运行定时器,定时时间间隔为1000mstestTimer->start(1000);./停止运行定时器if ( testTimer->isActive()
12、)testTimer->stop();QTimer还提供了一个简单的只有一次定时的函数singleShot()。一个定时器在100ms后触发处理函数animateTimeout()并且只触发一次。代码如下:QTimer:singleShot( 100, this, SLOT(animateTimeout() );第二种介绍:定时器的使用非常简单,我们只需要以下几个步骤就可以完成定时器的应用:1.产生一个定时器QTimer *time_clock=new QTimer(parent);2.连接这个定时器的信号和槽,利用定时器的timeout()connect(time_clock,SIGN
13、AL(timeout(),this,SLOT(slottimedone();即定时时间到就会发送timeout()信号,从而触发slottimedone()槽去完成某项事情3.开始定时器,并设定定时周期定时器定时有两种:start(int time)和setSingleShot(true)其中start(int time)是表示每隔time秒就会重启定时器,可以重复触发定时,除非你利用stop()将定时器关掉。而setSingleShot(true)则是仅仅启动定时器一次我们工程中常用的是前者。time_clock->start(2000);备注:我在中文的官网上找到的关于定时器的用法是如下的使用格式:QTimer *timer = new QTimer( myO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 亲子读书心得体会15篇
- 中学生物教研组工作总结
- 中队委竞选演讲稿模板集锦9篇
- 中国医师节致辞范文(6篇)
- 中医院经济管理经验汇报材料-学习材料范文
- 应急值守课件教学课件
- 影像科紧急抢救预案及流程(修)
- 影响-“小组合作学习”实效性的因素及对策
- 机动车安全技术检测仪器设备计算机控制与通信技术条件 编制说明
- wipo-文本和图像作品的集体管理
- 慢性伤口的综合处理课件
- 《人民币硬币和普通纪念币》理论考试题库(含答案)
- RoseMirrorHA安装维护手册
- 城市轨道交通牵引供电及电力技术分析
- 提高外墙干挂石材施工一次合格率QC成果Word版
- 建筑行业会计基本处理课件
- 超星尔雅学习通走近核科学技术章节测试答案
- 初中艺术鄂教七年级上册(2022年新编) 漫步艺术长廊舞剧欣赏《永不消逝的电波》教学设计
- python学习课件(共73张PPT)
- 中考数学复习专题课件:瓜豆原理之直线型
- 精品堆垛机安装指导书
评论
0/150
提交评论