2015-02-11 41 views
1

我有一個非常簡單的代碼來繪製圖形頂點之間的箭頭,這受到Qt圖示例應用程序的啓發,但我在渲染工件方面存在問題。當我使用下面的代碼在場景中手動繪製QPolygonF導致更新時出現渲染問題

QPolygonF arrowHead; 
... some setup 
painter->drawPolygon(arrowHead); 

,然後我周圍的頂點移動到(arrowHead多邊形)指着三角形,它得到重新粉刷油漆三角形多邊形冒頭,但老三角仍然停留呈現屏幕

render error

scene但是修復這個問題(拖動的背景下,或從其他地方調用update/invalidate)任何更新上。

render ok

的問題是,我不知道從哪裏給力更新,或如何告訴Qt來圍繞真實被拖動的頂點整個區域無效。

我試着在頂點上的itemChange事件中調用scene()->invalidate()(也更新),因爲它被拖動,但是這會導致整個應用程序崩潰,所以我假設我不允許從那裏調用更新。我也不能直接從paint方法中調用update,因爲這會在其自己的paint方法中無限遞歸。

我是否正確渲染,或者我需要手動更新場景? Here's a link to the whole rendering source code,但我想我可能在繪畫方面做了一些基本的錯誤。

回答

0

這裏的竅門:

添加

ui->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); 

您的MainWindow構造。

使用此標誌將強制QGraphicsView更新整個視口。

+0

雖然這可行,但這是一種過度蠻力的方法。你錯過了真正的問題。 – 2015-02-15 20:16:04

1

您沒有提供邊緣項目的正確邊界矩形。您從QGraphicsLineItem派生EdgeGraphicsItem,但您沒有覆蓋boundingRect。確保您遵循文檔,並且不要錯過根據需要撥打prepareGeometryChange

相關問題