2009-07-21 11 views
0

自分のアプリケーションのニーズに合わせて自分で実装したQGraphicsView.drawItems()を作成しました。このようなメソッドはうまく動作しますが、再描画する必要がない場合でも繰り返し呼び出されます。これにより、アプリケーションはプロセッサ使用率を最大限に引き出します。
何とか図面が完成したことを伝える必要がありますか?私はgitツリーのソースを読んで、そのようなことはやっていない。
アプリは、Python/PyQtはであり、そして私のドロー法は、次のようになります。Qt GraphicsSceneは常に再描画します

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) 

ビューの方法は、このように、「モンキー・パッチング」によって上書きされます。

self.ui.imageArea.drawItems=self.drawer.drawItems 

上記メソッドは最後のステートメントのself.drawer.drawItemsです。

これはなぜ起こりますか?

答えて

0

私は、これが問題の原因だと思う:たびにペンがセットされている)

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

それは、(更新を呼び出します。

item.setPen(markupColors[drawable.source]) 

あなたがソースコードを見てみましょう場合。

+0

ああ、優秀です。ありがとうございました! 代わりに 'painter.setPen'に変更しましたが、色は変わりませんか?代わりにペンを一度セットしなければならないでしょう。 – carlpett

関連する問題