大家好,我是IT文艺男,来自一线大厂的一线程序员

上次视频给大家从源码层面剖析了Qt update刷新机制的异步事件投递过程,这次视频主要从源码层面剖析Qt刷新事件(QEvent::UpdateRequest)的处理过程

我们追踪QEvent::UpdateRequest事件处理,进入消息通知流程,即QApplication::notify(QObject *receiver, QEvent *e)函数(没有对QEvent::UpdateRequest事件进行处理),进一步由QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e)函数处理;如下图所示::

函数主体内容如下::

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刷新机制的绘制过程;谢谢

最新文章

  1. Xen之初体验:XenMotion、 StorageMotion、Site Recovery、Power Management 各种新、高级功能免费
  2. mysql5.7导入csv文件
  3. Android 图形总结
  4. php-长文章分页函数
  5. 高级搜索插件solis search在umbraco中的使用
  6. if_nametoindex可以检查网卡名称是否有效
  7. MapReduce设置输出分隔符
  8. nginx反向代理proxy模块相关参数
  9. java web module of login
  10. makefile常用指令和常见变量。
  11. Composer生成PHP依赖包
  12. Drop dual
  13. backbone 1.1.2 api
  14. InnoSetup 使用
  15. 在 Apex 中使用合并统计查询
  16. nfs+rsync备份
  17. i春秋-百度杯十月场-EXEC
  18. 2501 矩阵距离 (bfs)
  19. Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
  20. Django form入门详解--2

热门文章

  1. 2020牛客暑期多校训练营 (第二场) All with Pairs
  2. Network of Schools POJ - 1236 有向强连通图
  3. 表达式目录树插件xLiAd.SqlEx.Core
  4. Kubernetes安装EFK教程(非存储持久化方式部署)
  5. 2018大都会赛 A Fruit Ninja【随机数】
  6. 51nod1089 最长回文子串 manacher算法
  7. 对于kmp求next数组的理解
  8. sdut2878 环形依赖的DP(高斯消元,剪枝后的模板
  9. Taro 3.x in Action
  10. CSS 定位 relative && absolute 问题?