在QGraphicsItem中,一個成員函數paint(),其聲明如下:
void QGraphicsItem::paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 )
在QGraphicsScene重繪繪制時,需要調用其中的每一個QGraphicsItem的paint()函數來逐個重新繪制組件。這個函數的參數 中,painter是繪圖設備的painter,option定義了一些繪圖參數,如繪圖區域大小等,而widget則是繪圖設備本身,paint()函 數實際上就是用painter在widget上畫一個圖,圖形的具體內容則有paint()的具體實現確定。不同的QGrahpicsItem的子類對 paint()函數做了不同的實現,我們也可以按照自己的需要,實現自己的paint()函數(比如原來實現效率太低需要實現一個高效率的版本等等),比如我們可以考慮給paint函數里所在的類設置一個類成 員函數指針,在paint中調用這個成員函數指針來給程序增加一些靈活定等等。
有些情況下,我們通過paint重繪需要手動的調用QGraphicsScene的update()函數來刷新界面。當然,有時候刷新界面還會出些問題, 在update()調用之后不會跟着刷新(比如在Qt 4.2.2中)。這個時候我們需要修改一下boundingRect()函數,也就是繼承QGrahpicsItem的boundingRect()函 數,返回一個區域。
---------------------
原文:https://blog.csdn.net/socrates/article/details/1999845