QGraphicsView가 올바르게 이해된다면 효율적으로 백만 가지 항목을 처리 할 수 있습니다.많은 항목이있는 2D 정적 장면에서 QGraphicsView 성능을 향상시키는 방법은 무엇입니까? (해결할 방법이 없습니까?)
내 응용 프로그램에는 몇 천 개 밖에 없지만 성능이 이미 매우 나쁩니다. View가 전체 장면을 보여줄 때, 확대, hoverEnvents 및 다른 것들은 불가능하게됩니다.
항목과 다른 최적화 플래그간에 상위 - 하위 관계를 만들려고 시도했지만 여전히 동일한 결과가 나타납니다. 나는 정말로 바보 같은 실수를하기를 바란다. 그러나 며칠 후에 문제를 해결할 방법을 찾고 나서 해결책을 찾지 못했다.
정말 도움이됩니다.
이
내 문제 재생 :import sys
import random
from PyQt4.QtGui import *
NO_INDEX = False
OPTIMIZE = False
ITEM_COORD_CACHE = False
ITEM_DEVICE_CACHE = False
NESTED_ITEMS = False
class TestItem(QGraphicsEllipseItem):
def paint(self, painter, option, index):
return QGraphicsEllipseItem.paint(self, painter, option, index)
def hoverEnterEvent (self, e):
self.setBrush(QBrush(QColor("orange")))
def hoverLeaveEvent(self,e):
self.setBrush(QBrush(None))
if __name__ == '__main__':
n = int(sys.argv[1]) # Number of items. With 5000 I already
# have performance problems
app = QApplication(sys.argv)
scene = QGraphicsScene()
# Populates scene
prev = None
for i in xrange(n):
# Random geometry and position
r1 = random.randint(10, 100)
r2 = random.randint(10, 100)
x = random.randint(0, 500)
y = random.randint(0, 500)
item = TestItem(x, y, r1*2, r2*2)
item.setAcceptsHoverEvents(True)
if NESTED_ITEMS:
# Creates a parent child structure among items
if not prev:
scene.addItem(item)
else:
item.setParentItem(prev)
prev = item
else:
scene.addItem(item)
if ITEM_COORD_CACHE:
item.setCacheMode(QGraphicsItem.ItemCoordinateCache)
elif ITEM_DEVICE_CACHE:
item.setCacheMode(QGraphicsItem.DeviceCoordinateCache)
# Creates View
view = QGraphicsView(scene)
# Sets basic Flags for nice rendering
view.setRenderHints(QPainter.Antialiasing or QPainter.SmoothPixmapTransform)
if NO_INDEX:
view.setItemIndexMethod(QGraphicsScene.NoIndex);
if OPTIMIZE:
view.setOptimizationFlags(QGraphicsView.DontAdjustForAntialiasing
or QGraphicsView.DontClipPainter
or QGraphicsView.DontSavePainterState)
view.show()
sys.exit(app.exec_())
- 인텔 (R) 제온 (R) CPU의 E5410에 @의 2.33GHz
- 엔비디아 G84 [쿼드 FX 1700]
- 우분투 9.04 64 비트
- QT4 4.5.3
- 파이썬 QT4 4.6
최근 PyQt5.7에서 시도해 보았을 때 성능에 영향이 없었으며 CPU가 빠르며 50,000 개의 타원이 보였습니다. 나는 이제 Qt가 더 좋았고, 문제가 해결되면 다르게 해결 될 것 같다. – Trilarion