查看完整版本: [-- QT实时接收数据画图的问题 --]

QTCN开发网 -> Qt基础编程 -> QT实时接收数据画图的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

tttomato 2021-09-14 14:47

QT实时接收数据画图的问题

要求开发一个软件,实时接收数据绘图,同时要开启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 2021-09-14 15:01
大哥,可以先看下自带的demo,你这没画一个点,都添加一个画布啊,我擦!

tttomato 2021-09-14 15:21
liudianwu:大哥,可以先看下自带的demo,你这没画一个点,都添加一个画布啊,我擦! (2021-09-14 15:01) 

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

zhanglyl 2021-09-19 14:20
后台添加缓冲区接受和处理数据啊,显示部分采用窗口截取显示!
自己在QPainter上绘制吧





查看完整版本: [-- QT实时接收数据画图的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled