串口将接收到的数据,进行解析后,使用QT绘图,动态刷新显示。先将项目文件中增加charts支持
QT += charts
在主窗口定义中增加
QT_CHARTS_USE_NAMESPACE
在ui中使用graphic view 控件占用图形显示的位置,并将控件提升为QChartView控件。
Qchart 可以绘制折线、条形图或饼图。折线需要有QLineSeries 容纳折线的坐标数据。先定义私有成员 QLineSeries *LineSerial; ,需要在构造函数中实例化。
chart = new QChart();
chart->legend()->hide(); chart->addSeries(LineSerial); //将线性序列加入到图 QValueAxis *xaxis = new QValueAxis(); //建立X,Y轴 QValueAxis *yaxis = new QValueAxis(); xaxis->setRange(0,20); // 设定 数轴范围 yaxis->setRange(0,10);</p><p class="MsoNormal" align="left" style="text-align:left;text-indent:24.0pt;mso-pagination:widow-orphan;tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt">[code]chart->addAxis(yaxis,Qt::AlignLeft);chart->addAxis(xaxis,Qt::AlignBottom);LineSerial->attachAxis(xaxis);LineSerial->attachAxis(yaxis);复制代码 chart->setTitle("Simple line chart example"); //设定图的抬头ui->chatview->setChart(chart); // 将 图加入到chatview
[/code]
这样就可以将折线图显示出来了。
使用串口数据动态刷新折线图
在串口接收的槽函数中,收到的数据是使用readall(),读到一个QString里面,但有可能只是零碎的数据片段。获得数据后,追加到先前接收到的数据后面,再进行处理。这里有一个专门的处理函数,在槽函数中调用。依据要求,传入数据段指针和需要处理的数据序列指针。使用QString中的各种方法,判断数据是不是完整的,找到数据头和尾。然后进行解析,将合法数据追加到数据序列里。
int bubfreqscanpharse(QString *p,QLineSeries *pls){
int npos = p->indexOf("@ 6.00 MHz"); int ret = 0; static int linecolor = 0; if(npos != -1){ if(p->right(2)=="\r\n"){ // QDebug() << "get tail"; QStringList datlist = p->split("@"); if(datlist.size()==42){ int i; float x,y; pls->clear(); for(i=1;i<42;i++){ x = datlist[i].mid(1,4).toFloat(); y = datlist[i].mid(11,4).toFloat(); pls->append(x,y); } pls->setColor(QColor(qrand()%255,qrand()%255,qrand()%255)); ret = 1; } p->clear(); } } return ret;}复制代码串口接收处理槽函数
void MainWindow::readData()
{ QString data = serial->readAll(); // 串口收到的数据放到data中 buf->append(data); // 追加data到接收缓冲区ui->lineEdit->setText(data); // 显示刚收到的数据// 调用数据处理函数,并传入缓冲区数据和链接到图的数据序列指针if(bubfreqscanpharse(buf,LineSerial) == 1){ chart->createDefaultAxes(); }}复制代码
作者: southcreek, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-408807.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
southcreek 2023-8-21 10:29
unknown type name 'qchartview'
需要在ui_xxx.h 文件中包含
#include <QtCharts>