如何绘制动态曲线
1个回答
展开全部
可以参考QWT绘制动态曲线
关于QWT
以下源于百度百科“QWT全称是QtWidgetsforTechnicalApplications,是一个基于LGPL版权协议的开源项目,可生成各种统计图。它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据,数据源以数值,数组或一组浮点数等方式提供,输出方式可以是Curves(曲线),Slider(滚动条),Dials(圆盘),Compasses(仪表盘)等等。该工具库基于Qt开发,所以也继承了Qt的跨平台特性。”
voidsetAxisTitle(intaxisId,constQString&)用来设置坐标轴名字,第一个参数是QWT定义的坐标轴ID,即yLeft,yRight,xBottom和xTop.
voidsetAxisScaleDraw(intaxisId,QwtScaleDraw*)用来设置坐标轴刻度,第一个参数同上,第二个参数就是我们刚才定义的TimeScaleDraw;
voidsetAxisScale(intaxisId,doublemin,doublemax,doublestep=0)也是设置刻度的,第一个参数同上,第二参数是刻度的最小值,第三个参数是刻度的最大值,最后一个是步长.
然后定义一个曲线QwtPlotCurve:
QwtPlotCurve,它的功能就是输入一系列的X,Y的值,然后绘制出曲线,当然,曲线的color,style那些是可以自己设置的.
缩放曲线(PS:这点就体现了QWT的强大之处):
QwtPlotZoomer,简单的一个类,简单的只个设置就可以缩放曲线,谁用谁知道啊.
定时器完成曲线的重绘:
adPlotTimer=newQTimer();
adPlotTimer->start(100);
connect(adPlotTimer,SIGNAL(timeout()),this,SLOT(plotAdCurve()));
因为所用的AD是400K的,算了一下,大概160ms以下就能满足了.
读取AD数据:
因为服务器接收到的AD数据是保存在文件中的,而且是实时保存(也就是将Client接收的数据保存到文件的同时将此文件中的数据绘制出来).所以设置了一个文件偏移量,而已此文件的前26字节是采集的时间信息,所以跳过.
又因为用的是AD是12位的,Client采用一个short类型来保存数据,而已每次传输32个AD数据,所以在计算AD数据前要确保文件已经有了32个AD数据,即64字节的数据.
关于QWT
以下源于百度百科“QWT全称是QtWidgetsforTechnicalApplications,是一个基于LGPL版权协议的开源项目,可生成各种统计图。它为具有技术专业背景的程序提供GUI组件和一组实用类,其目标是以基于2D方式的窗体部件来显示数据,数据源以数值,数组或一组浮点数等方式提供,输出方式可以是Curves(曲线),Slider(滚动条),Dials(圆盘),Compasses(仪表盘)等等。该工具库基于Qt开发,所以也继承了Qt的跨平台特性。”
voidsetAxisTitle(intaxisId,constQString&)用来设置坐标轴名字,第一个参数是QWT定义的坐标轴ID,即yLeft,yRight,xBottom和xTop.
voidsetAxisScaleDraw(intaxisId,QwtScaleDraw*)用来设置坐标轴刻度,第一个参数同上,第二个参数就是我们刚才定义的TimeScaleDraw;
voidsetAxisScale(intaxisId,doublemin,doublemax,doublestep=0)也是设置刻度的,第一个参数同上,第二参数是刻度的最小值,第三个参数是刻度的最大值,最后一个是步长.
然后定义一个曲线QwtPlotCurve:
QwtPlotCurve,它的功能就是输入一系列的X,Y的值,然后绘制出曲线,当然,曲线的color,style那些是可以自己设置的.
缩放曲线(PS:这点就体现了QWT的强大之处):
QwtPlotZoomer,简单的一个类,简单的只个设置就可以缩放曲线,谁用谁知道啊.
定时器完成曲线的重绘:
adPlotTimer=newQTimer();
adPlotTimer->start(100);
connect(adPlotTimer,SIGNAL(timeout()),this,SLOT(plotAdCurve()));
因为所用的AD是400K的,算了一下,大概160ms以下就能满足了.
读取AD数据:
因为服务器接收到的AD数据是保存在文件中的,而且是实时保存(也就是将Client接收的数据保存到文件的同时将此文件中的数据绘制出来).所以设置了一个文件偏移量,而已此文件的前26字节是采集的时间信息,所以跳过.
又因为用的是AD是12位的,Client采用一个short类型来保存数据,而已每次传输32个AD数据,所以在计算AD数据前要确保文件已经有了32个AD数据,即64字节的数据.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询