2016-10-03 160 views
0

當不帶參數調用update()或repaint()時,所有內容(包括下面的可見元素)都會完全重新繪製。這可以通過將ClipRect作爲參數傳遞來優化。 有沒有簡單的方法來獲得重新繪製區域,或者我必須手動確定它?有沒有辦法在Qt中獲得重繪區域?

P.S.使用QGraphicsScene時沒有這樣的問題,但是,我正在處理QmlApplicationViewer和QDeclarativeItems。可能有一種方法可以強制它達到相同的行爲。

+0

您能詳細闡述一下嗎?有沒有簡單的方法來獲得重新繪製的區域,或者這需要手動實施。這是什麼」? – peppe

+0

一堆輕量級對象正在繪製在圖像的頂部,導致整個圖像重新繪製。爲了避免這種情況,對於一些對象,我實現了一個getClipRect()方法,該方法返回覆蓋對象的最小矩形。然後我將這個矩形傳遞給update()方法。但是,我猜Qt應該知道重繪的區域(就像它與QGraphicsScene一樣),所以不需要爲每個對象編寫getClipRect()。 –

回答

1

有沒有簡單的方法來獲得重新粉刷區域,或者我必須手動確定 ?

被傳遞給的paintEvent()包含rectregion成員可以檢查以確定QWidget的特別需要重新繪製的哪個部分(一個或多個)的QPaintEvent對象。

+0

如何使用paint(QPainter *,QStyleOptionGraphicsItem *,QWidget *)? –

+0

QStyleOptionGraphicsItem有一個'exposedRect'成員,您可能會發現它很有用,但這似乎代表了屏幕上當前可見的項目部分,而不是需要重新繪製的部分項目。您可能需要重寫相應窗口小部件的paintEvent()(即調用所有項目上的paint()),並在調用其paintEvent()方法之前緩存其傳入的QPaintEvent對象的rect對象超類。然後你的項目可以看看該rect的緩存副本。 –

相關問題