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


大家好,我是IT文藝男,來自一線大廠的一線程序員

上次視頻給大家從源碼層面剖析了Qt update刷新機制的異步事件投遞過程,這次視頻主要從源碼層面剖析Qt刷新事件(QEvent::UpdateRequest)的處理過程

我們追蹤QEvent::UpdateRequest事件處理,進入消息通知流程,即QApplication::notify(QObject *receiver, QEvent *e)函數(沒有對QEvent::UpdateRequest事件進行處理),進一步由QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e)函數處理;如下圖所示::

notify_helper函數

函數主體內容如下::
1、application的事件過濾器處理,即全局的事件過濾處理
2、receiver的事件過濾器處理,即當前窗口的事件過濾處理
3、調用receiver的event函數處理,即當前窗口的事件處理

receiver的event函數不做處理,如下圖所示::

event函數

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

QWidget::event函數

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

syncBackingStore函數

函數主體內容如下::
1、獲取tlw的QWidgetBackingStore
2、調用sync函數

sync函數

doSync函數

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

paintDevice函數

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM