首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大量的QGraphicsItem

大量的QGraphicsItem
EN

Stack Overflow用户
提问于 2013-04-16 19:32:35
回答 2查看 794关注 0票数 1

我正在尝试使用Qt图形框架来绘制包含大量节点的图形(2000+)。使用QGraphicsViewQGraphicsScene,我可以使用addEllipse()方法轻松地绘制大量的椭圆,但是使用setBrush()更改项目的颜色太慢了。我也试过使用QGraphicsPixmapItem,然后切换像素图来改变颜色,但这也不起作用。你能给我一些建议如何做到这一点吗?使用OpenGL是我获得更好性能的唯一方法吗?

非常感谢。

编辑:我没有笔刷的例子。我稍后会把它贴出来。代码只是交换椭圆的笔刷,没有别的了,

编辑: Pixmap示例(代码是用python和PyQt编写的):

代码语言:javascript
复制
def startTest(self):
    self.n = 1000
    self.c = 1
    self.scene = QtGui.QGraphicsScene()
    self.scene.setSceneRect(0,0,500,500)
    self.graphicsView.setScene(self.scene)
    self.redPix = QtGui.QPixmap(5, 5)
    self.redPix.fill(QtGui.QColor(255,0,0))
    self.blackPix = QtGui.QPixmap(5, 5)
    self.blackPix.fill(QtGui.QColor(0,0,0))

    for i in range(0,self.n):
        temp = QtGui.QGraphicsPixmapItem(self.redPix)
        temp.setPos(random.uniform(10, 490),random.uniform(10, 490))
        self.scene.addItem(temp)

def updateNodes(self):

        if self.c:
            for i in self.scene.items():
                i.setPixmap(self.blackPix)
            self.c = 0
        else:
            for i in self.scene.items():
                i.setPixmap(self.redPix)
            self.c = 1
EN

回答 2

Stack Overflow用户

发布于 2013-04-16 23:52:14

好吧,也许它不会是真正流行的答案..但根据我的经验,我不认为QGraphicsScene/View方式适用于带有1000k+对象的东西。这是一个很棒的框架,有很多很好的特性,但是它的设计方式使得它对于大量的对象来说真的很慢。

你必须自己做大量的代码(如果你想在这么多的对象上获得良好的性能) /by这我的意思是裁剪/过滤/可能的泛化/如果你做自己的依赖于任务的渲染核心,这在比较中真的太多了。

我多年来一直使用Qt,并尝试使用View/Scene来处理重要的图形组件(不同的地图格式视图、SDK的2D图形设计视图),每次我都会使用自制的渲染引擎。

主要原因是Qt试图为您提供非常通用的处理图形对象的非常非常好的方式。他们有非常好的转换矩阵概念,基于双坐标,通用的样式方法,但代价是他们缺少所有最常见的优化重型图形视图的原则。

票数 1
EN

Stack Overflow用户

发布于 2013-04-16 19:51:19

您是否尝试过使用addEllipse()方法的brush参数进行指定?

代码语言:javascript
复制
QBrush blueBrush = QBrush(Qt::blue);
QPen noPen;
scene.addEllipse(x, y, w, h, noPen, blueBrush);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16035930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档