• 1723阅读
  • 3回复

[提问]QT实时接收数据画图的问题 [复制链接]

上一主题 下一主题
离线tttomato
 

只看楼主 倒序阅读 楼主  发表于: 2021-09-14
要求开发一个软件,实时接收数据绘图,同时要开启VR程序。
两个分别单独开都没问题,一起连动就会有点卡顿,并且在2-3分钟后程序会闪退。
一开始是用qpaint绘图的,后来听说qcustomplot更好一点,就用了这个。
但用处不大,一旦同步运行,程序依旧会闪退。
但同步运行也是可以运行2-3分钟,也不是一上来就马上闪退。看网上说画图可能比较占资源,但我看了在同步运行的时候内存其实都没满60%,CPU倒是一直在90%以上,到闪退的时候也是,内存没满,CPU也是勉强在95%以下,GPU就更少了。
那这个问题到底出在哪里,画图的代码如下:

void mainwindow::drawData (qreal y)        
{
     count++;
    if(count>100)
     {
           ui->GLV->xAxis->setRange(count-100,count)               //当数据量超过100,坐标图X轴自适应变化
     }
     double x = count;
     ui->GLV->addGraph();
     ui->GLV->graph(0)->addData(x,y);                                      //添加数据
     ui->GLV->replot();
      if(count%200==0)                                                               //每画200次,将图清空。
      {
            ui->GLV->clearGraphs();
       }
}


我的想法是因为程序不是一开始崩溃的,所以应该是图上积累的线条和点太多了,每次画都要画更多的点和线,因此跑着跑着就闪退了。
所以我想,如果每200个点后直接把图用  clear()  功能清了重新画,这样就可以和最开始程序的状态一样了。
但没什么用处,程序依旧会闪退。

我想问的是,程序崩溃的原因是什么,数据量太大了吗,还是我这个方法其实并没有清理掉之前点所占用的资源,又或是同步开了VR,画图真的不能一起运作。另外我所有的数据处理均在子线程,主线程只要负责接收数据画图就行了。
有没大佬可以指点一下~~~
离线liudianwu

只看该作者 1楼 发表于: 2021-09-14
大哥,可以先看下自带的demo,你这没画一个点,都添加一个画布啊,我擦!
欢迎关注微信公众号:Qt实战 (各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发)QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线tttomato

只看该作者 2楼 发表于: 2021-09-14
回 liudianwu 的帖子
liudianwu:大哥,可以先看下自带的demo,你这没画一个点,都添加一个画布啊,我擦! (2021-09-14 15:01) 

那就是说那个addGraph()只需要一次是吗。
我想知道那个clear方法是否能将之前画图占的资源清空。
谢谢
离线zhanglyl

只看该作者 3楼 发表于: 2021-09-19
后台添加缓冲区接受和处理数据啊,显示部分采用窗口截取显示!
自己在QPainter上绘制吧



快速回复
限100 字节
 
上一个 下一个