版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2008年10月第45卷增刊2四川大学学报(自然科学版)JournalofSichuanUniversity(NaturalScienceEdition)oCt.2008V01.45Supp1.2文章编号:0490—6756[2008)Suppl-006V04实时数据曲线绘制的Qt编程实现杨盛毅1,文方1,师娇2(1■贵州大学电气工程学院。贵阳550003;2.北京理工大学宇航科学技术学院,北京100081)摘要:动态绘制和显示实时数据曲线是工业测控系统中一项重要功能•本文提出了一种利用Qt编程动态绘制实时数据曲线的方案,解决了由于绘制时间较长而无法满足实时显示要求的问题.并通过实例介绍了其具体实现方法.实践证明该绘制方案能满足实时监控的要求•关键词:测控系统;实时数据曲线;Qt中图分类号:TP311文献标识码:A(1.ColElecteering,GuEngnologchooy.Ba)03,Chna,and(1.ColElecteering,GuEngnologchooy.Ba)03,Chna,andRea1izat1onofrea1_timedatacurveawingbaseonamming1.YANGSh1.1—tcurveisanimportantfunctionoftheindustr1-
a1test•1ngandcontr011Ingsystem.Amethodofdynam•Tcdraw1ngandshow•1ngtherea1—timedataCurVeQtprogammiintrodpaplongtoshowthedacurveampconem,eQtprogammiintrodpaplongtoshowthedacurveampconem,etQt引言工业测控系统中,常用动态实时数据曲线来监测某些量在工作环境变化时的控制稳定性•从而动态绘制实时数据曲线成为测控软件开发中的重要一环.而动态绘制实时数据曲线存在由于绘制时间较长而无法满足实时显示要求、绘制数据量大、动态平滑显示等问题•Qt是由挪威Tro11tech公司开发的一个跨平台的C++图形应用程序开发框架.基于“信号一槽”的通讯机制,并具有高度模块化、可重用性好、运行速度快、可移植性好等特点,对于用户开发来说是非常方便•目前主要用于Linux下的开发.同时Qt还是跨平台的.它使得跨平台软件编程直观、简易和方便•但同其它编程工具一样,Qt也不具备直接的动态曲线绘制能力,必须借助一些编程技术来实现•我们提出了一种利用Qt编程动态绘制实时数据曲线的方案,解决了由于绘制时间较长而无法满足实时显示要求的问题•2实时数据曲线绘制的基本思路所谓数据曲线,实质上是由许多直线首尾相连组合而成,在绘图区中用直线连接两数据点来实现,通过setWindow函数可设定绘图区大小及绘图原点坐标•数据曲线上前一时刻数据点通常在曲线上最左端显示,随着时间推移,整条曲线自右向左移动•实现曲线的动态平移必然涉及到曲线的消收稿日期:2008-08-31作者简介:杨盛毅(1986—),男.布依族,贵州平塘人,在读硕士研究生.研究方向为计算机测控技术.四川大学学报(自然科学版)增刊2隐或重绘,常用的两种绘图方式为:一种方式是将画线对象的属性设为与或,然后在原位置重绘曲线.单一背景色的情况下,也可直接用背景色重绘曲线,实现曲线的动态效果;另一种方式是通过调用API函数BitBh实现曲线的平滑移动•上述两种常用绘制方案,虽然解决了大数据量、动态平滑显示的问题,但实时性不佳,所以本文提出一种新的数据绘制方案•本方案中数据曲线上各点纵坐标反映实时数据的大小,通过记录次新点数据,并更新最新点数据,在定时器中使用Qwid—get类中scor11函数定时将图象向左卷动一定像素,卷动后scro11函数发送绘制事件•绘制事件中,只绘制由于卷动而空出的区域,利用drawL1ne函数将最新数据点与次新数据点以直线相连,即可实现实时数据曲线自右向左的平滑移动效果•绘图区内实时曲线的数据量由scroll函数卷曲的像素值所决定,即卷曲的像素越多,数据量越少,卷曲的像素越少,数据量越多•条件允许时.应增加实时曲线的数据量.更有利于监控现场环境的变化趋势•同时为了避免绘图区数据点过于拥挤.可在当前绘图区显示一部分数据曲线,通过滚动条查看数据曲线的其它部分•3实时曲线绘制的实时性由于绘制时间较长而无法满足实时显示的要求,是实时数据曲线绘制中存在的普遍问题•我们提出的方案,由于每次绘制时所需绘制的数据极I(2)声明模块级变量
yData1ypos;intdisp1ayDaplayDatachargebool(3)在Drawe「类构造函数中添加代码(3)在Drawe「类构造函数中添加代码kgr=0xpos=O(black)myTimertalc(4)为公有槽(4)为公有槽openDroseDraw添加代码openDraw:ClosmyTimerId—startTimer(30)myTimerId—startTimer(30):少,所以能有效提高绘制的实时性•在程序中.通过调用函数QueryPerformanceCounte「获取计算机定时器的当前值.并调用函数QueryPerformance—Frequency获取计算机定时器的频率,通过计算绘制后计算机定时器的值与绘制前计算机定时器的值之差,再乘以定时器频率,即可得到绘制所花费的时间.目前常用PC的定时器频率在3.5xHz左右,所以采用该方法计算绘制所花费的时间可以精确到0.28x10—S.通过实验•得到本文所述方案的平均绘制时间为173ns,而采用双缓冲绘制方案的平均绘制时间为1.72ms,由此可见,我们提出的方案有效的提高了绘制的实时性•4程序实例此处以一个完整的程序实例说明实时数据曲线的绘制方法•(1)首先构造实时绘图类创建Drawer类,它以公有方式继承于QWid〜get.由于该类定义了信号和槽,所以必须将Q-0BJECT宏置于类定义的开始处.在类中分别创建公有槽openDraw和c1oseDraw,前者是开始绘制控制函数.后者是停止绘制控制函数•再创建公有函数drawCurves和drawGridt前者用于绘制实时曲线,后者用于绘制网格•最后重载事件Paint—Event和t1merEvent,前者用于实现绘制事件,后者用于实现定时功能.//定义QObjeet定时器//实时数据曲线的横坐标//实时数据啮线的最新点数据//实时数据曲线的次新点数据//最新点数据向次新点数据的中转变量//绘制与初始化判断逻辑变量//将绘制区域的背景设置为黑色//设置定时器的初值//设置实时数据曲线的横坐标的初值//设置实时数据曲线中转变量的初值//设置为绘制//设置每3Oms产生一个定时事件2008年杨盛毅等:实时数据曲线绘制的Qt编程实现63closeDraw:Close=TURE;ki11Timer(myTimer1d);
update();(5)为公有函数drawCurves和drawGrid添加代码drawGrid(QPainter&painter):painter.setPen(green);for(intu=0;u<300;U++) {//设置为初始化//设置停止定时器//重新绘制绘图区//将画笔颜色设置为绿色//绘制网格的纵轴1f(u%50 e(--4,u,0,u)u,0,--u);))i;Pa
f(X1f(u%50 e(--4,u,0,u)u,0,--u);))i;Pa
f(X 0) {paintinter・drawLpos%10=-0IIne(-一4,—POs——O){//绘制网格的横轴Pa//绘制网格的横轴Pa0);)(——4,500,-4,——5inter&pa(QPPen(rPen(rayDatalypos/将画笔颜色设置为红色/将最新点数据通过中转变量传递给次新点painter.drawLinypos,0,—displayDa将最新点数据和次新点数据用直线连接(6)重载事件pa1Event(QPaI(thpainter.drawLinypos,0,—displayDa将最新点数据和次新点数据用直线连接(6)重载事件pa1Event(QPaI(th1,5(Cle=—TRUE)}else(xpos 二;}timerEvent(QTirrvent—>timer1d()—二5,O);displayDatallyp{QWidget::timerEve(——4,—displayDataftaiypos);nt和timerEventntEvent*event):QPairt(0,0,width(),heig(QRect(-700,-250,70{;drawCurves(paint);;displayDatalchargeerEvent*event):if(emyTimer1d){scroll(—os—rand()%150;)elseent(event);)(7)新建一个工程在Form1窗体上添加一个Drawer类的对象drawer,在其中绘制实时数据曲线;创建两个命令按钮:Begin—pushButton和Stop—pushButton.并用下列代码将对应的信号和槽连接起来•connct(Begin_pushButton,SIGNAL(c1connct(Begin_pushButton,SIGNAL(c10),单击信号与drawer,SLOTawer对象的opeconn(openDraw()))0),单击信号与drawer,SLOTawer对象的opeconnshButton,SIGNAL(c1ieked//设置绘制设备的物理坐标//设置画笔的逻辑坐标//判断是绘制曲线还是要初始化//绘制网格//绘制曲线//实时数据曲线的横坐标的初始化//实时数据曲线中转变量初始化//判断是否是我们需要的定时器//向左卷动5个像素//装人最新数据//若不是需要的定时器.将它传递给基类()),drawer,SLOT(closeDraw()));将停止键的单击信号与drawer对象的c1oseDraw槽连接在一程序编译运行后的效果如图1所示,绘图窗口中的数据曲线每隔一个定时时间自右向左移动设定像素•当然.为了界面的美观和读数方便,可在绘图窗口周围加上坐标刻度等,本文的程序示例主要实现动态绘制实时数据曲线.其它功能的实现程序日…女学学报(自然科学版)增刊25结语动惫绘制寅时数榔曲线是测控系统中的重要功能模块.我们提出了一种利朋00t编程动态绘制实时数据曲线的方案.解陡r由于绘制时问较K而无法满足实时显示要求的问题,具有一定实用价值文中程序的数据均是随机模拟的,实际测控系统中只需用采集输“数据或控制输出数据替换掉模拟数据即可程序圻例仅在同吓绘田窗口中动态绘制了单通道数据曲线•如需同时显示N通道数据曲线,H需将文中程序作简单扩充•具体宴现程序略参考文献:r1]GaXD1InBlarKhctteMarkSummerlieldC十一GUIProg……gw1n味31stEdition[MBHtain.I*carsonEdoca[ionZ003f2] {¥
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年网络直播内容运营合同
- 2025年医疗器械质量认证合同协议
- 2025年安徽某国企汽车驾驶员招聘1人参考考试试题及答案解析
- 能源设施建设合同
- 2025江苏无锡市宜兴市部分机关事业单位招聘编外人员40人(A类)参考考试题库及答案解析
- 2025年河南省中西医结合医院招聘员额制高层次人才11人参考考试试题及答案解析
- 2026江苏泰州市兴化市部分高中学校校园招聘教师18人考试备考题库及答案解析
- 2025广东财经大学第二次招聘合同制人员(司机岗位)1人模拟笔试试题及答案解析
- 2025广东肇庆市德庆县教育局所属公办幼儿园招聘合同制工作人员26人考试备考题库及答案解析
- 首都医科大学附属北京朝阳医院石景山医院派遣合同制职工招聘2人备考笔试题库及答案解析
- 1.手术室患者人文关怀管理规范中国生命关怀协会团体标准TCALC003-2023
- 2025年国家开放大学(电大)《经济法》期末考试备考试题及答案解析
- 煤矿机电运输安全培训课件
- 老年病科护理组长岗位竞聘
- 养老护理员人际关系与沟通
- 安徽省2025年普通高中学业水平合格性考试英语考题及答案
- 2025-2030中国碘化铑行业需求潜力及产销规模预测报告
- 团员团课学习课件
- 食品安全许可证管理制度
- 烟花爆竹零售点考试题库及答案2025
- 农村环卫管理体系-洞察及研究
评论
0/150
提交评论