引言
目前,为了提高数据校对的效率,使用合理的显示工具完成具体的数据处理,可以加速设计中调试的速度,这也是自行设计上位机的意义所在。数据处理在LabVIEW中是比较简单的,直接调用即可。在QT中可能需要采用其他的模块。
学习
QT5中比较快捷地实现图表的方式是QtCharts库,内置的QChartView和QLineSeries可以完成坐标轴和数据线的创建,配合其他类,可以快速完成一个折线图的创建,可以用于记录数据的变化,在数据处理上有较大的意义。这里以这个图为模块,对文件中的数据进行处理。
需要注意的点不多,一个是pro中不要忘记添加qt += charts,还有是命名空间QT_CHARTS_USE_NAMESPACE,然后是三个关键变量QChart、QLineSeries和坐标QValueAxis。对这三个变量进行操作,就可以完成图表的初始化和数据的刷新。
目标
作为测试用的上位机,记录多个数据的变化趋势是基本的功能。为了提高实用性,这里也是基于文件进行处理。处理过程中采用灵活的正则匹配方式,实现所有的数据的高速处理。预期使用txt文本完成多数据的变化显示。
结构
图表显示
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); m_series=new QLineSeries; m_chart=new QChart; m_series=new QLineSeries; m_series->setName("ss"); m_chart->addSeries(m_series); m_chart->createDefaultAxes(); m_axisX=new QValueAxis; m_axisX->setRange(0,60); m_axisX->setGridLineVisible(true); m_axisX->setTickCount(11); //标记的个数 m_axisX->setMinorTickCount(5); //次标记的个数 m_axisY=new QValueAxis; m_axisY->setRange(-5,10); m_axisY->setGridLineVisible(true); m_axisY->setTickCount(6); m_axisY->setMinorTickCount(2); m_chart->setAxisX(m_axisX,m_series); m_chart->setAxisY(m_axisY,m_series); m_chart->legend()->hide(); ui->graphicsView->setChart(m_chart); ui->graphicsView->setRenderHint(QPainter::Antialiasing); m_timer.setInterval(1000); m_timer.start(); connect(&m_timer,SIGNAL(timeout()),this,SLOT(handleTimeout())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_refreshData_clicked() { int i; for(i=0;i<1000;i++) { m_series->append(i,sin(i)); } }
前半段代码源自网络,后半段代码简单的定义。
文本读取
从txt文本中以单个字节为间隔的方式读取整个串行数据。
QFile fil(QDir::currentPath()+".txt"); fil.open(QIODevice::ReadOnly); char buf[1]; qint64 addr; qint64 length; QString buf_exp(buf); QRegExp exp("[0-9a-fA-F]"); addr=0; int i; bool toStop; toStop = false; i=0; while(!toStop) { fil.seek(addr); length = fil.read(buf,sizeof (buf)); buf_exp = buf; if(!exp.indexIn(buf_exp)) { qDebug()<<buf_exp<<":"<<sizeof(buf_exp); int x= atoi(buf); m_series->append(i,x); i++; addr=addr+length; } else { qDebug()<<"error"; addr=addr+1; } if(addr>=fil.size()) { fil.close(); toStop = true; } }
为了方便控制位宽,采用单字节读取,后面再逐渐修改正则匹配的形式。
效果
上面是基于函数生成的理想波形,下图是基于字节读取的数据。
结论
QT5可以快速地完成数据显示的设计,用于数据的分析处理。
附件
欢迎在下方评论、转发、分享。
最新评论