我正在尝试使用Qt图形框架来绘制包含大量节点的图形(2000+)。使用QGraphicsView和QGraphicsScene,我可以使用addEllipse()方法轻松地绘制大量的椭圆,但是使用setBrush()更改项目的颜色太慢了。我也试过使用QGraphicsPixmapItem,然后切换像素图来改变颜色,但这也不起作用。你能给我一些建议如何做到这一点吗?使用OpenGL是我获得更好性能的唯一方法吗?
非常感谢。
编辑:我没有笔刷的例子。我稍后会把它贴出来。代码只是交换椭圆的笔刷,没有别的了,
编辑: Pixmap示例(代码是用python和PyQt编写的):
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发布于 2013-04-16 23:52:14
好吧,也许它不会是真正流行的答案..但根据我的经验,我不认为QGraphicsScene/View方式适用于带有1000k+对象的东西。这是一个很棒的框架,有很多很好的特性,但是它的设计方式使得它对于大量的对象来说真的很慢。
你必须自己做大量的代码(如果你想在这么多的对象上获得良好的性能) /by这我的意思是裁剪/过滤/可能的泛化/如果你做自己的依赖于任务的渲染核心,这在比较中真的太多了。
我多年来一直使用Qt,并尝试使用View/Scene来处理重要的图形组件(不同的地图格式视图、SDK的2D图形设计视图),每次我都会使用自制的渲染引擎。
主要原因是Qt试图为您提供非常通用的处理图形对象的非常非常好的方式。他们有非常好的转换矩阵概念,基于双坐标,通用的样式方法,但代价是他们缺少所有最常见的优化重型图形视图的原则。
发布于 2013-04-16 19:51:19
您是否尝试过使用addEllipse()方法的brush参数进行指定?
QBrush blueBrush = QBrush(Qt::blue);
QPen noPen;
scene.addEllipse(x, y, w, h, noPen, blueBrush);https://stackoverflow.com/questions/16035930
复制相似问题