大家好,我是IT文藝男,來自一線大廠的一執行緒式員
上次視頻給大家從原始碼層面剖析了Qt重繪事件(QEvent::UpdateRequest)的處理流程,這次視頻主要從原始碼層面剖析對重繪事件的進一步處理,即繪制以及輸出螢屏的程序
回到QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QPoint &offset, int flags,QPainter *sharedPainter, QWidgetBackingStore *backingStore)函式

函式主體內容如下::
1、繪制背景
2、繪制前景(send the paint event)

即Send QPaintEvent事件,觸發virtual void QWidget::paintEvent(QPaintEvent *event)事件處理函式被呼叫
3、繪制子控制元件(paintSiblingsRecursive函式呼叫)

QWidgetPrivate::paintSiblingsRecursive函式里又會呼叫QWidgetPrivate::drawWidget函式從而形成樹形繪制,
繪制完成之后,怎么輸出到螢屏上了?
qtbase\src\plugins\platforms\windows目錄中的QWindowsBackingStore::flush函式中會呼叫BitBlt函式(Windows API函式),如下圖所示::

QWindowsBackingStore::flush函式堆疊如下圖所示::

今天就講解到這里,總結下整體思路即是繪制、螢屏輸出(Qt Windows插件的API函式呼叫)程序分析,很清晰; 謝謝
由于這里不能發布視頻,所以我在這發布了文章,在我的微信公眾號(itwenyinan)里同步發布了詳細的PPT以及視頻進行詳細解說
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/270548.html
標籤:C++
上一篇:C++基礎學習第一天
