paintEvent()重繪事件

Qt Creator快速入門

一個重繪事件用來重繪一個部件的全部或者部分區域,下面幾個原因的任意一個都會發生重繪事件:

(1)repaint()函數或者update()函數被調用;

(2)被隱藏的部件現在被重新顯示;

(3)其他一些原因。

    大部分部件可以簡單地重繪它們的全部界面,但是一些繪製比較慢的部件需要進行優化而只繪製需要的區域(可以使用QPaintEvent::region()來獲取該區域),這種速度上的優化不會影響結果。Qt也會通過合併多個重繪事件爲一個事件來加快繪製,當update()函數被調用多次,或者窗口系統發送了多個重繪事件,那麼Qt就會合並這些事件成爲一個事件,而這個事件擁有最大的需要重繪的區域。update()函數不會立即進行重繪,要等到Qt返回主事件循環後纔會進行,所以多次調用update()函數一般只會引起一次paintEvent()函數調用。而調用repaint()函數會立即調用paintEvent()函數來重繪部件,只有在必須立即進行重繪操作的情況下(比如在動畫中),才使用repaint()函數。update()函數允許Qt優化速度和減少閃爍,但是repaint()函數不支持這樣的優化,所以建議一般情況下儘可能使用update()函數。還要說明一下,在程序開始運行時就會自動發送重繪事件而調用paintEvent()函數,另外,不要在paintEvent()函數中調用update()或者repaint()函數。

    當重繪事件發生時,要更新的區域一般會被擦除,然後在部件的背景上進行繪製。

發佈了15 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章