你們好,我是IT文藝男,來自一線大廠的一線程序員程序員
上次視頻給你們從源碼層面剖析了Qt刷新事件(QEvent::UpdateRequest)的處理流程,此次視頻主要從源碼層面剖析對刷新事件的進一步處理,即繪製以及輸出屏幕的過程windows
回到QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QPoint &offset, int flags,QPainter *sharedPainter, QWidgetBackingStore *backingStore)
函數微信
函數主體內容以下::
一、繪製背景
二、繪製前景(send the paint event)函數
即Send QPaintEvent事件,觸發virtual void QWidget::paintEvent(QPaintEvent *event)事件處理函數被調用
三、繪製子控件(paintSiblingsRecursive函數調用)插件
QWidgetPrivate::paintSiblingsRecursive函數裏又會調用QWidgetPrivate::drawWidget函數從而造成樹形繪製。線程
繪製完成以後,怎麼輸出到屏幕上了?3d
qtbase\src\plugins\platforms\windows目錄中的QWindowsBackingStore::flush函數中會調用BitBlt函數(Windows API函數),以下圖所示::code
QWindowsBackingStore::flush函數堆棧以下圖所示::orm
今天就講解到這裏,總結下總體思路便是繪製、屏幕輸出(Qt Windows插件的API函數調用)過程分析,很清晰; 謝謝視頻
因爲這裏不能發佈視頻,因此我在這發佈了文章,在個人微信公衆號(itwenyinan)裏同步發佈了詳細的PPT以及視頻進行詳細解說