Я написал собственную реализацию QGraphicsView.drawItems()
, чтобы соответствовать потребностям моего приложения. Метод как таковой работает нормально, однако он вызывается повторно, даже если его не нужно перерисовывать. Это приводит к тому, что приложение максимально использует процессор.
Нужно ли как-то сигнализировать, что рисунок закончен? Я прочитал источник в git tree и не смог увидеть ничего подобного.
Приложение находится в Python / PyQt, и мой метод рисования выглядит так:
def drawItems(self, painter, items, options):
markupColors={'manual':QColor(0, 0, 255),
'automatic':QColor(255, 0, 0),
'user':QColor(0, 255, 0)}
for index in xrange(len(items)):
item=items[index]
option=options[index]
dataAsInt, dataIsInt=item.data(self.DRAWABLE_INDEX).toInt()
drawable=None
if dataIsInt:
drawable=self.drawables[dataAsInt]
item.setPen(markupColors[drawable.source])
item.paint(painter, option, None)
Метод представления переопределяется с помощью «monkey-patching», например:
self.ui.imageArea.drawItems=self.drawer.drawItems
Вышеуказанным методом является self.drawer.drawItems в последнем утверждении.
Есть идеи, почему это происходит?