从传感器实时获取的数据,从串口上传到上位机,上位机由QT开发,上位机如何通过实时动态曲线方式进行展示呢?网上主要有两种方式:1、使用qwt;2、QCustomPlot;两者都差不多,QCustomPlot貌似更灵活漂亮点,但是由于qwt还有其他控件,这次的选择是qwt。
/*************************************** 转载请注明出处:tedeum.iteye.com ****************************************/
一、首先要定义和实例化一个QwtPlot,然后是一根曲线QwtPlotCurve,还有就是数据,由于QwtPlot是从设计器拉到界面,IDE做了这个工作就暂时不管了,如果没有IDE可以用代码写的:
//曲线 QwtPlotCurve * curve; //X轴 double time[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; //Y轴 double val[10] = {3, 5, 8, 7, 2, 0, 7, 9, 1};
二、接下来就是把这些东西组装起来:
//实例化 curve = new QwtPlotCurve("Acc_X"); //加载数据 curve->setSamples(time, val, 10); //加到plot,plot由IDE创建 curve->attach(ui->qwtPlot);
话不多说,一切尽在注释中,运行可以看见曲线绘制出来了:
图表显示出来,现在的问题是这是一个静态图标,如何动态显示实时数据呢,我们用定时器模拟产生随机数进行动态数据的展示,如下:
//启动定时器,1秒响应,用于模拟产生实时数据 this->startTimer(1000); //定时器事件 void MainWindow::timerEvent( QTimerEvent * ) { //所有数据前移移位,首位被覆盖 for (int i = 0; i < 9; i++) { val[i] = val[i+1]; } //最后一位为新数据(这里为随机数模拟) val[9] = qrand()%10; //重新加载数据 curve->setSamples(time, val, 10); //QwtPlot重绘,重要,没有这句不起作用 ui->qwtPlot->replot(); }
好了,到此为止可以动态显示实时曲线了:
最后,还有一个问题当多条曲线共同显示的时候,如何隐藏显示曲线呢,比如加速度传感器的x、y、z共同显示,我只想看一条。可以通过点击图例在做到,好了还是看代码和注释:
//实例化图例 QwtLegend *legend = new QwtLegend; //图例可以选择,Checkable legend->setDefaultItemMode( QwtLegendData::Checkable ); //pwtPlot中插入图例 ui->qwtPlot->insertLegend(legend, QwtPlot::LeftLegend ); //连接槽,处理选择事件 connect( legend, SIGNAL( checked( const QVariant &, bool, int ) ), SLOT( legendChecked( const QVariant &, bool ) ) ); //图例选择事件 void MainWindow::legendChecked( const QVariant &itemInfo, bool on ) { //获取曲线 QwtPlotItem *plotItem = ui->qwtPlot->infoToItem( itemInfo ); //根据图例选择状态,设置曲线隐藏还是显示 if ( plotItem ) plotItem->setVisible(on); //重要,下面这句没有不起作用 ui->qwtPlot->replot(); }
好了,简单吧。qwt实时曲线显示的关键技术细节都在这里了:
/*************************************** 转载请注明出处:tedeum.iteye.com ****************************************/
相关推荐
这份代码实现了在一个窗口中通过Qwt显示并刷新曲线、点击图例实现曲线的显示和隐藏、曲线图的放大和缩小,我自己也是新手,花了很多时间才搞懂这些,所以95%的代码做了详细标注,供麻油参考
该demo实现了简单的温湿度实时动态曲线的绘制,使用qwt-6.1.3中的QwtPlot实现,非常轻松就能够实现绘图的功能。
QT用QWT绘制动态曲线例程,实时监测。
Qt 利用QWt实现绘制动态曲线 横轴随时间移动向后移动 实时显示当前数据变化
在Qt(5.5.1)中,利用qwt(6.1.2)实现二维曲线的绘制,并且具有动态、实时显示,以及通过鼠标滚轮实现坐标轴以及曲线的缩放等功能(在几个同事电脑上都试过,编译全部通过)。
QWT,动态显示折线图,VS2010+QT5.4
qwt画实时曲线的小demo,我的开发环境是vs2008和Qt插件。新手可以看看,代码很简单。老手就不用下载浪费时间了
QT 实时动态曲线Demo
QT-QWT控件 QWT控件 qwt-6.0.0 曲线控件
可以实现曲线动态显示,隐藏,参考文章http://tedeum.iteye.com/blog/2018706
一款实用非qwt库的开源实时曲线封装类,支持多通道显隐、动态坐标、时间标、实时性强等特点,可以直接添加欢迎进行完善修改分享。
qwt-datetime.zip,用qwt的例子,实时画曲线!
qwt-6.2+qt程序员+绘制波形及曲线
Qt,使用qwt画曲线图,简单易懂,需要的拿去、、、、、、
qt的开源类,用于显示各种二维曲线,各个接口封装的很好,使用简单。很好很强大。
利用Qt6设置鼠标跟随动态显示曲线上的点的值,Qt6及以上可完美运行
编译环境:vs2008,qt4.8.2 调用qwt控件画曲线图,显示两跟颜色不一样的曲线,可以滚动鼠标放大缩小
利用QT的QWT库,讲串口数据实时的绘制出来,该代码完好,能生成exe
示波器,监控展示某物理量。 水平有限,希望多指正。
该例子修改自qwt demo中的oscilloscope,利用从串口获取的数据进行显示,工程使用 mingw gcc 编译。。