我编写了自己的QGraphicsView.drawItems()
实现,以满足我的应用程序的需求。这样的方法工作正常,但是,它被重复调用,即使它不需要重绘。这会导致应用程序最大化处理器利用率
我是否需要以某种方式表明绘图已完成?我在git树中读到了源代码,我看不到有任何这样的事情发生了
该应用程序使用Python / PyQt,我的draw-method看起来像这样:
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。
为什么会发生这种情况?
答案 0 :(得分:0)
我认为这会导致问题:
item.setPen(markupColors[drawable.source])
如果你看一下源代码:
void QAbstractGraphicsShapeItem::setPen(const QPen &pen)
{
Q_D(QAbstractGraphicsShapeItem);
prepareGeometryChange();
d->pen = pen;
d->boundingRect = QRectF();
update();
}
每次设置笔时都会调用update()。