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()函數。
當重繪事件發生時,要更新的區域一般會被擦除,然後在部件的背景上進行繪製。