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);
chart->setAxisX(xaxis); //将数轴加入到图
chart->setAxisY(yaxis);
chart->setTitle("Simple line chart example"); //设定图的抬头
ui->chatview->setChart(chart); // 将 图加入到chatview
这样就可以将折线图显示出来了。
使用串口数据动态刷新折线图
在串口接收的槽函数中,收到的数据是使用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/408807-441671.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
🤞长按图片 扫码申请🤞