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以及视频进行详细解说

相关文章
相关标签/搜索