qwt实时曲线

匿名 (未验证) 提交于 2019-12-03 00:27:02

一、首先要定义和实例化一个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();  }



     //实例化图例      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(); }



    /***************************************      转载请注明出处:tedeum.iteye.com      ****************************************/  








文章来源: qwt实时曲线
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!