[CW32F030系列] 【CW32F030FxPx StartKit开发板】优化上位机卡顿问题

[复制链接]
 楼主| 新曲难觅旧知音 发表于 2024-6-28 16:52 | 显示全部楼层 |阅读模式
上次实现了采集温度数据通过串口发送到电脑,然后在上位机实现波形显示。
这次填一下上次的坑。也算改一下上次的bug。
上位机采集数据量变多后就会变得很卡。单条曲线接收几千个数据后就可以看出明显卡顿。
网上给出的解决方法是使用OpenGL加速画图,这样可以牺牲性能换取速度。开启方法也很简单 series->setUseOpenGL(true);就可以了。
不过性能提示也很有限,大概在两万个点后重新发生卡顿现象。
后来了解到使用第三方绘图控件QCustomPlot
QCustomPlot官网链接:
  1. https://www.qcustomplot.com/index.php/introduction

3ef72dce581762cf5d314147d795d833
下载最新的2.11版本,解压后得到的qcustomplot.h和qcustomplot.cpp拷贝到项目目录下,别忘了在.pro文件中添加相关文件
43d52161f56d7575cab96fcfd9e963e5
然后防置个QWidget 转换为 QCustomPlot。
QCustomPlot的几个重要类
QCustomPlot 图表类:用于图表的显示和交互;
QCPLayer 图层:管理图层元素(QCPLayerable),所有可显示的对象都是继承自图层元素;
QCPAbstractPlottable 绘图元素:包含 折线图(QCPGraph)、曲线图(QCPCurve)、柱状图(QCPBars)、QCPStatiBox(盒子图)、QCPColorMap(色谱图)、QCPFinancial(金融图);
QCPAxisRect 坐标轴矩形:一个坐标轴矩形默认包含上下左右四个坐标轴,但是可以添加多个坐标轴;
添加个实例代码看看
  1. // 生成数据,画出的是抛物线

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

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

  4. {

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

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

  7. }

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

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

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

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

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

  13. // 为坐标轴添加标签

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

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

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

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

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

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

  20. // 重画图像

  21. ui->customPlot->replot();

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

您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

144

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

26

主题

144

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部