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

你們好,我是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以及視頻進行詳細解說

相關文章
相關標籤/搜索