qt源码--事件系统

news2024/9/20 10:29:01

qt的事件传播主要依赖于QCoreApplication、QAbstractEventDispatcher(会根据不同的平台生成各自的处理对象)、QEvent(各种事件类型)等。

首先看下QCoreApplication的实现:

 

 

 

 2、了解QCoreApplication的构造函数

 其构造函数主要是初始化QCoreApplicationPrivate对象,并调用QCoreApplicationPrivate的init函数;

 QCoreApplicationPrivate构造函数主要是初始化一些变量,其最主要的是创建了一个线程QThread,主线程theMainThread就是此时创建的。

解析来看下init函数:

 init函数中主要是创建eventDispatcher对象,其是qt事件分发的基础,windows和qt之间的事件交互主要是由eventDispatcher对象实现,后边会单独介绍;

至此QCoreApplication类创建完成。

2、熟悉qt应用的都知道,QCoreApplication创建完成后,会调用exec函数,开启qt的事件循环。exec函数实现如下:

exec函数主要是生成了一个QEventLoop对象,并调用QEventLoop的exec函数,由此猜测,其事件循环主要实在QEventLoop对象中实现;QEventLoop中exec的实现如下:

 分析此函数,发现其主要是通过while循环中调用processEvents函数,此exec函数会阻塞应用程序直到exit为false;其processEvents函数如下:

此函数会调用eventDispatcher的processEvents函数,processEvents函数会检测windows的事件如:鼠标事件、键盘点击等事件,后续会详细分析;

总结:

Qt事件循环机制主要是由QCoreApplication调用exec循环,然后在调用QEventLoop的exec函数,由QEventLoop的exec函数中调用eventDispatcher的processEvents函数来接收windows事件。大致如下:

 由于QCoreApplication的内容比较多,后续会在来分析sendEvent、postEvent等函数;下一篇会先着重分析下QAbstractEventDispatcher的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在最新ICP备案域名的基础上,结合其他网络营销手段,打造强大的品牌推广效果

API接口是一种软件系统之间进行交互的方式,通过API接口,可以在不同的系统之间传递数据、命令等信息。在网络营销中,API接口可以帮助我们更加高效地进行品牌推广。本文将以在最新ICP备案域名的基础上,结合其他网络营销手段&#xf…

JVM回收算法(标记-清除算法, 复制算法, 标记-整理算法)

1.标记-清除算法 最基础的算法,分为两个阶段,“标记”和“清除” 原理: - 标记阶段:collector从mutator根对象开始进行遍历,对从mutator根对象可以访问到的对象都打上一个标识,一般是在对象的header中&am…

vue-router 4.0 动态路由会跳转到 404 页面的问题

引子 开发过前端单页面应用的小伙伴们,应该对前端路由都不陌生吧。 无论是用 vue 或者 react,都有官方提供的 router 方案。 但是有些场景下,处于安全性和友好性考虑,我们需要用到动态路由。 如果你不知道什么叫动态路由&…

翻遍整个牛客网,整理出了全网最全的Java面试八股文大合集,整整4000多页

大家从 Boss 直聘上或者其他招聘网站上都可以看到 Java 岗位众多,Java 岗位的招聘薪酬天差地别,人才要求也是五花八门。而很多 Java 工程师求职过程中,也是冷暖自知。很多时候技术有,但是面试的时候就是过不了! 为了帮…

4.7 x64dbg 应用层的钩子扫描

所谓的应用层钩子(Application-level hooks)是一种编程技术,它允许应用程序通过在特定事件发生时执行特定代码来自定义或扩展其行为。这些事件可以是用户交互,系统事件,或者其他应用程序内部的事件。应用层钩子是在应用…

【Zabbix 监控 Windows 系统,Java应用,SNMP】

目录 一、Zabbix 监控 Windows 系统1、下载 Windows 客户端 Zabbix agent 22、安装客户端,配置3、在服务端 Web 页面添加主机,关联模板 二、Zabbix 监控 java 应用1、客户端开启 java jmxremote 远程监控功能1、配置 java jmxremote 远程监控功能2、启动…

【ARM Coresight 系列文章 3.1 - ARM Coresight DP 对 AP 的访问 2】

文章目录 图 1-1 如上图1-1 所示,DAP上可以集成多个MEM-AP,上图是集成了3个MEM-AP,它们可能是AXI-AP, AHB-AP, APB-AP。 那么AP的类型是如何区分的呢? 不同的组件会使用不同MEM-AP接口,如Cortex-A/Coretex-R 系列的c…

ai绘画工具有哪些?这几款好用的ai绘画工具免费分享给你

上周,我去了一家现代艺术画廊,墙上挂满了令人叹为观止的绘画作品。我被其中一幅细腻而充满情感的油画所深深吸引,想要了解背后的创作过程。这时,一位热情的艺术导师走到我身边。她微笑着说:“这幅作品实际上是由ai绘画…

解决“_mkdir无法识别空格目录“问题

在C编程里,有时候需要创建一个文件夹,通常使用库函数_mkdir(const char* dirname)来新建一个文件夹,该库函数每次只能创建一个文件夹,不能级联创建。若要级联创建文件,则请用递归方式或者for循环方式调用_mkdir()。 #…

7月6日华为云盘古气象大模型登上《Nature》杂志:相比传统数值预报快10000倍

7月6日,国际顶级学术期刊《自然》(Nature)杂志正刊发表了华为云盘古大模型研发团队的最新研究成果——《三维神经网络用于精准中期全球天气预报》(《Accurate medium-range global weather forecasting with 3D neural networks》…

CrossKD 原理与代码解析

paper:CrossKD: Cross-Head Knowledge Distillation for Dense Object Detection official implementation: https://github.com/jbwang1997/CrossKD 前言 蒸馏可以分为预测蒸馏prediction mimicking和特征蒸馏feature imitation两种,201…

【LeetCode】HOT 100(26)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

什么是 AOP?对于 Spring IoC 和 AOP 的理解?Spring AOP 和 AspectJ AOP 有什么区别?

什么是 AOP? AOP(Aspect-Oriented Programming),即 面向切面编程, 它与OOP( ObjectOriented Programming, 面向对象编程) 相辅相成,提供了与OOP 不同的抽象软件结构的视角 在 OOP 中, 我们以类(class)作为我们的基本单元 而 A…

Zynq 多个UDP客户端组网启动问题(Auto negotiation error)PS:附UDP客户端初始化代码

最近正在进行一个Zynq项目,根据设计需求,需要将上位机作为UDP服务器,而FPGA则充当UDP客户端。同时,服务器需要能够接收和控制多个UDP客户端。 开发过程中,我是基于lwip UDP Perf Client 官方模版开发的。我遇到了以下几…

重磅!高通大客户「跳单」,智能座舱SoC赛道进入「混战期」

哪家车企是高通座舱芯片的最大客户?答案不是蔚来、理想、小鹏等智能化布局领先的新势力,而是比亚迪。 高工智能汽车研究院监测数据显示,2022年中国市场(不含进出口)乘用车智能座舱前装标配高通芯片交付367.45万辆&…

DALL·E2(unCLIP)、Stable Diffusion、IS、FID要点总结

DALLE 1 DALLE 1可以看成是VQ-VAE和文本经过BPE编码得到的embedding AE(Auto Encoder) encoder decoder结构,AE在生成任务时只会模仿不会创造,所有有了后面的VAE VAE(Variational AutoEncoder) 不再学习固定的bottleneck特征…

2023-07-07-liunx环境,python调用ITK(c++版本)批量生成Drr

文章目录 一、前言二、配置过程2.1.CMake与ITK的配置2.2.改写ITK的生成drr代码2.3.编译代码2.4.python调用cpp 三、总结四、参考博客 一、前言 最近在做配准,需要用ITK来生成数据,windows版本可以通过cmake与visual studio可以跑通生成。但是想要在linu…

纯干货,全文手码:如何利用低/无代码平台建立集团信息化系统

信息化系统是企业管理体系的延伸 对于一家集团企业而言,要实现信息化,首先需要考虑是否已经建立了完备的信息化管理制度。早在上世纪九十年代卡特彼勒引入了6 Sigma,使整个集团公司的运营规范化、系统化。通过多年的实践积累,卡特…

【雕爷学编程】Arduino动手做(157)---MX1508双路电机驱动模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

计算机视觉:通过边缘检测探究卷积的特征提取功能

本文重点 在前面的课程中,我们学习了卷积核的运算,同时我们也学习了卷积核的含义,我们可以将卷积核理解为特征提取器,也就是说一个卷积核就是一个特征提取器,很多人对这种说法不了解,下面我们就通过一个边缘检测的例子来看一下卷积核是如何进行边缘特征的提取的。 什么…