我目前正在開發一個小矢量繪圖程序,您可以創建線條並在創建後修改它們(這些線條基於自定義QGraphicsItem)。例如,下面的圖片顯示時最左邊的(標記爲黃色)線的點被拖拽到屏幕的右側,有效的延長線會發生什麼:修改自定義QGraphicsItem時顯示的工件
一切工作正常時,點緩慢地移動,然而,當快速地移動,一些視覺假象出現:
該件的我使用要求進行重繪位於mouseMoveEvent
重定義的方法,其中包含的以下各行的代碼代碼:
QRectF br = boundingRect();
x2 = static_cast<int>(event->scenePos().x()-x());
y2 = static_cast<int>(event->scenePos().y()-y());
update(br);
有我的boundingRect
定義顯然是沒有問題的,因爲在paint
方法添加painter->drawRect(boundingRect())
表明這一點:
,也有當線路簡單移動(標誌QGraphicsItem::ItemIsMovable
沒問題被設置),甚至很快。
有沒有人知道這裏發生了什麼?我的猜測是update
沒有被立即調用,因此mouseMoveEvent
可以重新調用前多次調用,也許取消以前的調用?我不確定。
當然,簡單的修復方法是將QGraphicsView
對象的視口模式設置爲QGraphicsView::FullViewportUpdate)
,但這很醜陋(而且很慢)。
那解決了這個問題,謝謝! – thomasc 2014-10-29 18:50:32