你們好,我是IT文藝男,來自一線大廠的一線程序員程序員
上次視頻給你們從源碼層面剖析了Qt update刷新機制的異步事件投遞過程,此次視頻主要從源碼層面剖析Qt刷新事件(QEvent::UpdateRequest)的處理過程windows
咱們追蹤QEvent::UpdateRequest事件處理,進入消息通知流程,即QApplication::notify(QObject *receiver, QEvent *e)
函數(沒有對QEvent::UpdateRequest事件進行處理),進一步由QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e)
函數處理;以下圖所示::app
函數主體內容以下::
一、application的事件過濾器處理,即全局的事件過濾處理
二、receiver的事件過濾器處理,即當前窗口的事件過濾處理
三、調用receiver的event函數處理,即當前窗口的事件處理異步
receiver的event函數不作處理,以下圖所示::函數
其調用父類的event函數,即bool QWidget::event(QEvent *event)
函數,該函數中針對事件類型進行處理(switch case),以下圖所示::this
對於QEvent::UpdateRequest事件,則調用syncBackingStore函數,以下圖所示::線程
函數主體內容以下::
一、獲取tlw的QWidgetBackingStore
二、調用sync函數3d
QWidgetBackingStore::doSync
函數中調用tlw->d_func()->drawWidget(store->paintDevice(), dirtyCopy, QPoint(), flags, 0, this)
;函數進行繪製,函數的第一個參數是獲取繪製設備,各個平臺返回本身的繪製設備,例如對於Windows平臺code
qwindowsbackingstore.cpp文件位於qtbase\src\plugins\platforms\windows目錄;orm
今天就講解到這裏,總結下總體思路便是從事件處理到繪製的過程分析,很清晰; 下次視頻進行源碼剖析Qt update刷新機制的繪製過程;謝謝