打印
[CW32F030系列]

【CW32F030FxPx StartKit开发板】优化上位机卡顿问题

[复制链接]
469|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
上次实现了采集温度数据通过串口发送到电脑,然后在上位机实现波形显示。
这次填一下上次的坑。也算改一下上次的bug。
上位机采集数据量变多后就会变得很卡。单条曲线接收几千个数据后就可以看出明显卡顿。
网上给出的解决方法是使用OpenGL加速画图,这样可以牺牲性能换取速度。开启方法也很简单 series->setUseOpenGL(true);就可以了。
不过性能提示也很有限,大概在两万个点后重新发生卡顿现象。
后来了解到使用第三方绘图控件QCustomPlot
QCustomPlot官网链接:
https://www.qcustomplot.com/index.php/introduction


下载最新的2.11版本,解压后得到的qcustomplot.h和qcustomplot.cpp拷贝到项目目录下,别忘了在.pro文件中添加相关文件

然后防置个QWidget 转换为 QCustomPlot。
QCustomPlot的几个重要类
QCustomPlot 图表类:用于图表的显示和交互;
QCPLayer 图层:管理图层元素(QCPLayerable),所有可显示的对象都是继承自图层元素;
QCPAbstractPlottable 绘图元素:包含 折线图(QCPGraph)、曲线图(QCPCurve)、柱状图(QCPBars)、QCPStatiBox(盒子图)、QCPColorMap(色谱图)、QCPFinancial(金融图);
QCPAxisRect 坐标轴矩形:一个坐标轴矩形默认包含上下左右四个坐标轴,但是可以添加多个坐标轴;
添加个实例代码看看
// 生成数据,画出的是抛物线

QVector<double> x(101), y(101); //初始化向量x和y

for (int i=0; i<101; ++i)

{

x[i] = i/50.0 - 1; // x范围[-1,1]

y[i] = x[i]*x[i]; // y=x*x

}

ui->customPlot->addGraph();//添加数据曲线(一个图像可以有多个数据曲线)

// graph(0);可以获取某个数据曲线(按添加先后排序)

// setData();为数据曲线关联数据

ui->customPlot->graph(0)->setData(x, y);

ui->customPlot->graph(0)->setName("第一个示例");// 设置图例名称

// 为坐标轴添加标签

ui->customPlot->xAxis->setLabel("x");

ui->customPlot->yAxis->setLabel("y");

// 设置坐标轴的范围,以看到所有数据

ui->customPlot->xAxis->setRange(-1, 1);

ui->customPlot->yAxis->setRange(0, 1);

ui->customPlot->legend->setVisible(true); // 显示图例

// 重画图像

ui->customPlot->replot();


实测数据五十万还是很流畅运行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

135

帖子

0

粉丝