J'ai écrit ma propre implémentation de QGraphicsView.drawItems()
, pour répondre aux besoins de mon application. La méthode en tant que telle fonctionne bien, cependant, elle est appelée à plusieurs reprises, même si elle n'a pas besoin d'être redessinée. Cela provoque l'application pour maximiser l'utilisation du processeur.
Ai-je besoin de signaler en quelque sorte que le dessin est terminé? J'ai lu la source dans l'arbre git, et je ne pouvais pas voir une telle chose se faire.
L'application est en Python/PyQt, et mon tirage méthode ressemble à ceci:Qt GraphicsScene constamment redessiner
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)
méthode de la vue est remplacé par "singe-patching", comme ceci:
self.ui.imageArea.drawItems=self.drawer.drawItems
ci-dessus La méthode est self.drawer.drawItems dans la dernière instruction.
Des idées pour lesquelles cela se produit?
Ah, excellent. Je vous remercie! Je l'ai changé à 'painter.setPen' à la place, mais il ne change pas de couleur? Je vais devoir essayer de mettre le stylo une fois à la place. – carlpett