• 6884阅读
  • 6回复

QPainterPath怎么这么没效率? [复制链接]

上一主题 下一主题
离线bluetornado
 
只看楼主 倒序阅读 楼主  发表于: 2009-08-14
我写了一个程序,大约要画三条曲线,每条曲线约有十万个点,在Linux下在CPU一般为0%,但是在wind下面CPU一般为100%,而且根本就不能用,窗口一动就没有响应,不知道是怎么回事
我创建QPainterPath的代码大致是这样写的(在函数BuildGrapherList中):
    painterPath[0].moveTo(0,pData[0][0]);
    painterPath[1].moveTo(0,pData[1][0]);
    for(int i=1;i<nDataSize;i++)//nDataSize大约为十万
    {
            painterPath[0].lineTo(i,pData[0]);
            painterPath[1].lineTo(i,pData[1]);
       }
painterEvent中是这样写的
tPainter.SetBrush(brush);
         tPainter.drawRect(0,yTrans+fOceanLevel[0]-fFaultWidth[0])*yScale,size().width(),fFaultWidth[0]*yScale);
          tPainter.setBrush(Qt::NoBrush);
         tPainter.drawPath(painterPath[0]);
         tPainter.drawpath(painterPath[1]);

源代码 GraView.cpp (20 K) 下载次数:8
离线dbzhang800

只看该作者 1楼 发表于: 2009-08-14
10万个点,屏幕显示的话,这么多点有用么?

另外
应该可以先画到 QPixmap 中,再显示到屏幕上吧,这样就不会无响应了
离线bluetornado
只看该作者 2楼 发表于: 2009-08-14
因为这个要经常用到放到缩小的操作,分析其中的几十个点或几千个点,如果画到QPixmap中的话,效率反而会降低
离线dbzhang800

只看该作者 3楼 发表于: 2009-08-15
1.  我没试过,感觉上先画到 QPixmap,然后显示,对性能的影响应该是微乎其微的。如不对 期待高人指正

2. 要求性能的话,每次只构造并显示有效的点会不会更好一点,比如你的10万点的线要显示在 1440*900 的屏幕上,从中抽取1500个点并显示应该完全足够了,每次缩放的话,都重新构建并显示有效的点
离线bluetornado
只看该作者 4楼 发表于: 2009-08-15
我改用了OpenGL,win和linux下CPU基本都是0%。同时还发现QPainter居然可以直接在OpenGL环境中绘制文字,不知道这是什么原理?
离线yj_yulin

只看该作者 5楼 发表于: 2009-08-16
点数太多通常都得用LOD, 另外出现100%的情况自己profile一下,再不济就自己看qt的代码吧,调试下一步步地跟进去,加点耐心应该能知道是什么问题,按理应该是win下的图形性能好一点的,特别是涉及到文字的输出。
离线robertkun

只看该作者 6楼 发表于: 2009-08-16
学习
                                              简单的生活使人快乐!
快速回复
限100 字节
 
上一个 下一个