你们好,我是IT文艺男,来自一线大厂的一线程序员程序员
上次视频给你们从源码层面剖析了Qt update刷新机制的异步事件投递过程,此次视频主要从源码层面剖析Qt刷新事件(QEvent::UpdateRequest)的处理过程windows
咱们追踪QEvent::UpdateRequest事件处理,进入消息通知流程,即QApplication::notify(QObject *receiver, QEvent *e)
函数(没有对QEvent::UpdateRequest事件进行处理),进一步由QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e)
函数处理;以下图所示::app
函数主体内容以下::
一、application的事件过滤器处理,即全局的事件过滤处理
二、receiver的事件过滤器处理,即当前窗口的事件过滤处理
三、调用receiver的event函数处理,即当前窗口的事件处理异步
receiver的event函数不作处理,以下图所示::函数
其调用父类的event函数,即bool QWidget::event(QEvent *event)
函数,该函数中针对事件类型进行处理(switch case),以下图所示::this
对于QEvent::UpdateRequest事件,则调用syncBackingStore函数,以下图所示::线程
函数主体内容以下::
一、获取tlw的QWidgetBackingStore
二、调用sync函数3d
QWidgetBackingStore::doSync
函数中调用tlw->d_func()->drawWidget(store->paintDevice(), dirtyCopy, QPoint(), flags, 0, this)
;函数进行绘制,函数的第一个参数是获取绘制设备,各个平台返回本身的绘制设备,例如对于Windows平台code
qwindowsbackingstore.cpp文件位于qtbase\src\plugins\platforms\windows目录;orm
今天就讲解到这里,总结下总体思路便是从事件处理到绘制的过程分析,很清晰; 下次视频进行源码剖析Qt update刷新机制的绘制过程;谢谢