Qgraphicsscene不断重绘

时间:2009-07-21 07:42:49

标签: python qt

我编写了自己的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。

为什么会发生这种情况?

1 个答案:

答案 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()。