私は現在、線を作成して作成後に変更できる小さなベクター描画プログラムを開発しています (これらの線はカスタム QGraphicsItem に基づいています)。たとえば、下の図は、線の左端 (黄色でマーク) の点を画面の右側にドラッグするとどうなるかを示しており、効果的に線が長くなります。

ポイントをゆっくり動かすとすべて正常に動作しますが、急速に動かすといくつかの視覚的なアーティファクトが表示されます。

再描画を呼び出すために使用しているコードmouseMoveEventは、次のコード行を保持する再定義されたメソッドにあります。
QRectF br = boundingRect();
x2 = static_cast<int>(event->scenePos().x()-x());
y2 = static_cast<int>(event->scenePos().y()-y());
update(br);
メソッドにboundingRect追加すると次のようになるため、私の定義にはpainter->drawRect(boundingRect())明らかに問題はありません。paint

QGraphicsItem::ItemIsMovableまた、単純に行を移動する (フラグを立てる) 場合も、急激に移動しても問題ありません。
ここで何が起こっているか知っている人はいますか?私の推測では、updateすぐに呼び出されていないためmouseMoveEvent、再描画が発生する前に複数回呼び出すことができます。おそらく以前の呼び出しをキャンセルしますか? わからない。
もちろん、簡単な修正はQGraphicsView、ラインを保持しているオブジェクトのビューポート モードを に設定するQGraphicsView::FullViewportUpdate)ことですが、それは醜い (そして遅い) ものです。