Qt GraphicsScene постоянно перерисовывается - PullRequest
0 голосов
/ 21 июля 2009

Я написал собственную реализацию 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 в последнем утверждении.

Есть идеи, почему это происходит?

1 Ответ

0 голосов
/ 21 июля 2009

Я думаю, что это вызывает проблему:

item.setPen(markupColors[drawable.source])

Если вы посмотрите на исходный код:

void QAbstractGraphicsShapeItem::setPen(const QPen &pen)
{
    Q_D(QAbstractGraphicsShapeItem);
    prepareGeometryChange();
    d->pen = pen;
    d->boundingRect = QRectF();
    update();
}

Он вызывает update () каждый раз, когда устанавливается ручка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...