




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
QT5开发及实例(第5版)第11章定时器、线程和DLL库——定时器和线程01定时器:QTimer1.定时器用法2.定时器实例定时器:QTimer1.定时器用法如果要在应用程序中周期性地进行某项操作,则可以使用定时器。在Qt中提供有定时器QTimer类,此类的常用方法如表1所示,其常用信号如表2所示。方
法描
述start(n)启动或重启定时器,时间间隔为n毫秒。如果定时器已经运行,它将被停止并重新启动。如果singleShot信号为真,定时器将仅被激活一次。stop()停止定时器。信
号描
述singleShot在给定的时间间隔后调用一个槽函数时发射此信号。timeout当定时器超时时发射此信号。定时器:QTimer要使用定时器,首先引入QTimer库,创建一个QTimer对象,将其timeout信号连接到相应的槽函数,调用start(毫秒数)设定时间间隔后启动定时,定时器会以指定的时间间隔发出timeout信号,执行槽函数。例如:#include<QTimer>QTimer*timer=newQTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(槽函数()));timer->start(2000);......timer->stop();timer->singleShot(n,函数名);定时器:QTimer2.定时器实例【例】(简单)(CH1101)用QTimer动态显示系统时间。以“直接编写代码”(即取消勾选“Generateform”复选框)方式创建Qt项目,项目名timerTest,“ClassInformation”页基类选“QWidget”。代码如下(timerTest.cpp):Widget::Widget(QWidget*parent):QWidget(parent){setWindowTitle("QTimer应用测试");label=newQLabel(this);label->setGeometry(20,20,180,60);timer=newQTimer(this);connect(timer,SIGNAL(timeout()),this,SLOT(showTime()));timer->start(1000);}......voidWidget::showTime(){QDateTimetime=QDateTime::currentDateTime(); //获取当前时间QStringtimeDisplay=time.toString("yyyy-MM-ddhh:mm:ssdddd"); //设置时间显示label->setText(timeDisplay); //在标签上显示时间}定时器:QTimer为了让程序能够定时自动退出,在项目入口文件main.cpp中添加语句:intmain(intargc,char*argv[]){QApplicationa(argc,argv);Widgetw;w.show();
QTimer::singleShot(20000,&a,SLOT(quit())); //20秒退出应用returna.exec();}其中,quit()为退出系统函数。运行程序,显示系统时间如图。02线程:QThread1.线程用法2.线程实例线程:QThread1.线程用法Qt实现线程机制最核心的底层类是QThread,它的用法如下:(1)要开始一个线程,先创建QThread的一个子类,并重载QThread::run()函数。在自定义线程类头文件中声明,代码如下:#include<QThread>class线程类:publicQThread{Q_OBJECT ...protected:voidrun(); //重载的函数 ...};在自定义线程类源文件中重写run()函数,执行线程相关代码,如下:#include"头文件"......void线程类::run(){//线程相关代码......}线程:QThread(2)然后,在主程序中创建一个线程类的对象,并启动:线程类*thread=new线程类();thread->start();线程启动之后,会自动调用其实现的run()函数,而线程要完成的任务就写在run()函数中,当run()函数执行完毕退出之后线程基本也就结束了。QThread类中的常用方法如表。方
法描
述start()启动线程。wait(n)阻止线程,等待时间n的单位是毫秒。如果线程已完成执行(从run()返回),返回true;如果线程尚未启动,返回true;如果n是ULONG_MAX(默认值),则等待,永远不会超时(线程必须从run()返回);如果等待超时,将返回false。sleep(n)强制当前线程睡眠n秒。msleep(n)强制当前线程睡眠n毫秒。exit()退出线程事件循环并返回代码。返回0表示成功,非0表示错误。quit()退出线程事件循环并返回0(成功),相当于exit():0。terminate()强制终止线程。setPriority(枚举)设置线程优先级。isFinished()判断线程是否完成。isRunning()判断线程是否正在运行。线程:QThread其常用信号如表。信
号描
述started在开始执行run()函数之前,从相关线程发射此信号。finished当程序完成业务逻辑时,从相关线程发射此信号。线程:QThread2.线程实例【例】(简单)(CH1102)QThread线程测试。以“直接编写代码”(即取消勾选“Generateform”复选框)方式创建Qt项目,项目名threadTest,“ClassInformation”页基类选“QWidget”。(1)先基于QThread创建自定义的线程类。在项目中添加C++类Worker继承自QThread,类的具体信息设置如图。线程:QThread(2)实现线程任务在线程类头文件worker.h中定义信号和声明线程run()函数,如下:#ifndefWORKER_H#defineWORKER_H#include<QThread>#include<QDateTime>classWorker:publicQThread{Q_OBJECTpublic:Worker();signals:voidstrOutSignal(QString); //定义信号protected:voidrun(); //线程run()函数private:boolworking;};#endif//WORKER_H线程:QThread在线程类源文件worker.cpp中编写run()函数的代码,完成要线程执行的任务,如下:#include"worker.h"Worker::Worker(){working=true;}voidWorker::run(){while(working){QDateTimetime=QDateTime::currentDateTime();QStringtimeStr=time.toString("yyyy-MM-ddhh:mm:ssdddd");emitstrOutSignal(timeStr); //发出信号sleep(1); //线程休眠1秒}}线程:QThread(3)主程序使用线程开发好线程类之后,就可以在主程序中直接使用线程来完成相应的任务。先在主程序头文件threadTest.h中声明槽函数和引用线程对象的指针,如下:#ifndefWIDGET_H#defineWIDGET_H#include<QWidget>#include<QListWidget>#include<QPushButton>#include<QGridLayout>#include"worker.h"classWidget:publicQWidget{Q_OBJECTpublic:Widget(QWidget*parent=nullptr);~Widget();privateslots:voidthreadStart(); //启动线程voidlistStrAdd(QStringstrInf); //接收线程信号执行加入当前时间字符串到列表中private:QListWidget*listStr;QPushButton*pbStart;Worker*thread; //引用线程对象的指针};#endif//WIDGET_H线程:QThread最后,再在主程序源文件threadTest.cpp中创建线程对象,并启动它来完成任务。运行程序,单击“开始”按钮,每隔1秒显示一次系统时间,如图。QT5开发及实例(第5版)第11章定时器、线程和DLL库——Qt程序开发和调用DLL库Qt程序开发和调用DLL库【例】(难度一般)(CH1103)运动健身减肥已成为现代人的生活时尚,开发一个“健康计算器”计算体脂率(BFR)、判断体态,用于身材管理,界面如图。01开发DLL库1.创建C++库项目2.编写导出函数(接口)3.生成DLL开发DLL库1.创建C++库项目(1)运行QtCreator,在欢迎界面左侧点“CreateProject...”按钮,或者选择“文件”→“NewProject...”命令,在出现的“NewProject”窗口选择项目模板。点左栏“Projects”列表下的“Library”,中间栏选“C++Library”选项,如图。开发DLL库(2)命名项目并选择保存路径。这里将项目命名为BFRCalculator,如图,单击“下一步”按钮进入下一步骤。(3)接下来的界面让用户选择项目的构建(编译)工具,选qmake,单击“下一步”按钮。开发DLL库(4)在“DefineProjectDetails”页的“Type”栏选择“SharedLibrary”(共享库);“Qtmodule”栏选择“Core”;并根据需要重命名头文件和源文件,如图。开发DLL库2.编写导出函数(接口)(1)在头文件BfrCalculator.h中声明导出函数getBfr,如下:#ifndefBFRCALCULATOR_H#defineBFRCALCULATOR_H
#include"BFRCalculator_global.h"
classBFRCALCULATOR_EXPORTBFRCalculator{public:BFRCalculator();};
#endif//BFRCALCULATOR_H
extern"C"{BFRCALCULATOR_EXPORTfloatgetBfr(floatbmi,intage,intsex);}开发DLL库(2)在源文件BfrCalculator.cpp中编写导出函数getBfr,根据传入参数实现对BFR值的计算,代码如下:#include"BfrCalculator.h"
BFRCalculator::BFRCalculator(){}
floatgetBfr(floatbmi,intage,intsex){floatbfr=1.2*bmi+0.23*age-5.4-10.8*sex;returnbfr;}开发DLL库3.生成DLL选择主菜单“构建”→“构建项目"BFRCalculator"”,执行后在项目debug目录下生成了几个文件,如图。02使用DLL库1.创建Qt项目2.设计界面3.添加DLL4.程序调用DLL使用DLL库1.创建Qt项目以“设计器QtDesigner”(要勾选“Generateform”复选框)方式创建Qt项目,项目名BFRApp,“ClassInformation”页基类选“QWidget”。在项目中新建一个image目录,将程序要用的图片资源icon.jpg、bg.jpg存放在该目录下。2.设计界面在项目树形视图中双
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中职新能源课题申报书
- 广东省课题的申报书
- 博士生人文课题申报书
- 中药农业课题申报书
- 甘肃党建课题申报书范例
- 肾内科课题申报书
- 协同育人课题申报书参考
- 文学 课题申报书
- 人工绿化合同范本
- 变更经营范围合同范例
- 矿山道路施工组织设计方案
- 徽派建筑PPT江西婺源
- 正弦函数的图像与性质优秀课件
- 山东省任氏宗亲分布村落
- 北师大版小学数学五年级下册《有趣的折叠》说课稿
- 陕西省建设工程长安杯奖省优质工程结构备案和复查的要求
- 典型示功图分析(全)
- 水生观赏动物鉴赏与维护课程
- ATOS阿托斯叶片泵PFE-31PFE-41PFE-51选型资料样本
- 全国优秀中医临床人才研修项目考试大纲
- 日语综合教程第五册的PPT5-1
评论
0/150
提交评论