• 1960阅读
  • 5回复

[原创]Qt update刷新之源码分析(二) [复制链接]

上一主题 下一主题
离线it文艺男
 

只看楼主 倒序阅读 楼主  发表于: 2021-02-28

大家好,我是IT文艺男,来自一线大厂的一线程序员
上次视频给大家从源码层面剖析了Qt update刷新机制的异步事件投递过程,这次视频主要从源码层面剖析Qt刷新事件(QEvent::UpdateRequest)的处理过程
我们追踪QEvent::UpdateRequest事件处理,进入消息通知流程,即QApplication::notify(QObject *receiver, QEvent *e)函数(没有对QEvent::UpdateRequest事件进行处理),进一步由QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e)函数处理;如下图所示::
window.open('http://www.qtcn.org/bbs/attachment/Mon_2102/17_208164_9d2b4759e9187ee.png?206');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >

函数主体内容如下::
1、application的事件过滤器处理,即全局的事件过滤处理
2、receiver的事件过滤器处理,即当前窗口的事件过滤处理
3、调用receiver的event函数处理,即当前窗口的事件处理
receiver的event函数不做处理,其调用父类的event函数,即bool QWidget::event(QEvent *event)函数,该函数中针对事件类型进行处理(switch case),如下图所示::

对于QEvent::UpdateRequest事件,则调用syncBackingStore函数,如下图所示::

函数主体内容如下::
1、获取tlw的QWidgetBackingStore
2、调用sync函数

QWidgetBackingStore::doSync函数中调用tlw->d_func()->drawWidget(store->paintDevice(), dirtyCopy, QPoint(), flags, 0, this);函数进行绘制,函数的第一个参数是获取绘制设备,各个平台返回自己的绘制设备,例如对于Windows平台

qwindowsbackingstore.cpp文件位于qtbase\src\plugins\platforms\windows目录;
今天就讲解到这里,总结下整体思路即是从事件处理到绘制的过程分析,很清晰;
下次视频进行源码剖析Qt update刷新机制的绘制过程;谢谢
4条评分好评度+1贡献值+1金钱+10威望+1
20091001753 好评度 +1 - 2021-02-28
20091001753 贡献值 +1 - 2021-02-28
20091001753 威望 +1 - 2021-02-28
20091001753 金钱 +10 - 2021-02-28
我的微信公众号itwenyinan,高质量技术平台
离线liulin188

只看该作者 1楼 发表于: 2021-02-28
一线大厂,多大的厂?
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
离线snow_man_0

只看该作者 2楼 发表于: 2021-02-28
支持。建议中QObject开始分析
离线it文艺男

只看该作者 3楼 发表于: 2021-03-13
回 snow_man_0 的帖子
snow_man_0:支持。建议中QObject开始分析 (2021-02-28 10:48) 

好的,我会在微信公众号(itwenyinan)上优先发布
我的微信公众号itwenyinan,高质量技术平台
离线it文艺男

只看该作者 4楼 发表于: 2021-03-13
回 liulin188 的帖子
liulin188:一线大厂,多大的厂? (2021-02-28 10:10) 

行业排第二,没人排第一
我的微信公众号itwenyinan,高质量技术平台
离线liulin188

只看该作者 5楼 发表于: 2021-03-13
回 it文艺男 的帖子
it文艺男:行业排第二,没人排第一 (2021-03-13 13:06) 

愿闻其详
https://wiki.qt.io/Qt_5.12_Release
https://wiki.qt.io/New_Features_in_Qt_5.12
https://wiki.qt.io/Qt_5.12.0_Known_Issues
https://www.qt.io/blog/qt-5.13.2-released
https://www.qt.io/blog/qt-creator-4.10.2-released
https://wiki.qt.io/Qt_5.12_Tools_and_Versions
快速回复
限100 字节
 
上一个 下一个