Qt update刷新之源碼分析(二)

你們好,我是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

notify_helper函數

函數主體內容以下::
一、application的事件過濾器處理,即全局的事件過濾處理
二、receiver的事件過濾器處理,即當前窗口的事件過濾處理
三、調用receiver的event函數處理,即當前窗口的事件處理異步

receiver的event函數不作處理,以下圖所示::函數

event函數

其調用父類的event函數,即bool QWidget::event(QEvent *event)函數,該函數中針對事件類型進行處理(switch case),以下圖所示::this

QWidget::event函數

對於QEvent::UpdateRequest事件,則調用syncBackingStore函數,以下圖所示::線程

syncBackingStore函數

函數主體內容以下::
一、獲取tlw的QWidgetBackingStore
二、調用sync函數3d

sync函數

doSync函數

QWidgetBackingStore::doSync函數中調用tlw->d_func()->drawWidget(store->paintDevice(), dirtyCopy, QPoint(), flags, 0, this);函數進行繪製,函數的第一個參數是獲取繪製設備,各個平臺返回本身的繪製設備,例如對於Windows平臺code

paintDevice函數

qwindowsbackingstore.cpp文件位於qtbase\src\plugins\platforms\windows目錄;orm

今天就講解到這裏,總結下總體思路便是從事件處理到繪製的過程分析,很清晰; 下次視頻進行源碼剖析Qt update刷新機制的繪製過程;謝謝

相關文章
相關標籤/搜索