当前位置: 首页 > news >正文

QT事件机制理解

事件和信号

从硬件层来看: 事件就是一种中断,
中断的产生形式:
1.用户操控硬件所产生的中断。
2.由系统自身所产生的中断,比如说定时器。

这种中断由系统内核监控,由系统内核接收到中断并向CPU发出的执行请求就叫信号。所以说事件是信号产生的基础
当Cpu接收到请求信号之后,对这个中断进行的响应叫做事件响应
在操作系统中,用户操控硬件时的中断由操作系统所监控,比如,当用户点击了一下鼠标时,此时鼠标就产生了一个中断,操作系统监控到这个中断,向CPU发出响应的请求(即一种信号),CPU按照自己的时间片对这个响应请求进行响应并进入相应的函数对这个鼠标点击事件进行处理的过程,叫做响应。当CPU进入事件处理函数后就可执行对点击事件的各种软件层的逻辑包括再发出不同的信号。

事件与信号与槽机制

事件是信号槽中信号产生的基础,而不是信号槽,信号槽解决的是两个不相关的控件中的通信问题。
事件是解决本控件对来自系统中信号的响应问题,两者不是一个概念。只能说信号槽的信号产生是由事件产生的。

QT里的事件

main.cpp

创建了一个QApplication 对象a,调用exec()后,整个程序进入事件循环,由QApplication 对象a监控应用程序中所有控件所产生的事件

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
简要描述QT事件处理机制:由exec执行的事件循环监听整个应用程序中所有控件的事件,当某个控件产生相关事件之后,QApplication 对象
就会执行 notify 函数,向此控件发送通知,收到事件通知的控件通过 过滤 以及 分发函数,到达事件处理函数,整个过程为响应函数。

QT底层维护的 事件处理机制 路径

在这里插入图片描述
并且QT事件处理函数都是虚函数,可以重写功能。
常用事件处理函数:

  • 鼠标事件 QMouseEvent
  • 键盘事件 QKeyEvent
  • 重绘事件 QPaintEvent
  • 定时器事件 QTimeEvent
  • 拖拽事件 QDropEvent

再次区别事件机制、信号与槽机制

事件机制是针对于某一个控件,信号与槽机制针对两个不相关的控件
事件机制是CPU调度完成的,信号与槽机制是自动触发的,只要触发了信号,直接槽函数处理,不会等CPU

相关文章:

  • 深入探讨 ElementUI 动态渲染 el-table
  • 移植bash到openharmony
  • Django后端架构开发:Django 与 Celery 的深度集成
  • VirtualBox上的Oracle Linux虚拟机安装Docker全流程
  • Nginx服务器申请及配置免费SSL证书
  • RabbitMQ 消息可靠保障
  • 通过FileReader API获取上传音频的长度
  • 【Python系列】 并发编程在数据处理中的应用
  • 第二届海南大数据创新应用大赛 - 算法赛道冠军比赛攻略_海南新境界队
  • 设计模式22-迭代器模式
  • 【运维】深入理解 Linux 中的 `mv` 命令,使用 `mv` 移动所有文件但排除特定文件或文件夹
  • SQL Server数据库 创建表,和表的增删改查
  • 浮毛怎么去掉比较方便?最最高效解决办法宠物空气净化器分享
  • 【C++例题 / 训练】二分算法(模板 例题)
  • 【本社翻译】Unity官方XR开发电子书
  • JavaScript-如何实现克隆(clone)函数
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 08.Android之View事件问题
  • 30秒的PHP代码片段(1)数组 - Array
  • bootstrap创建登录注册页面
  • Django 博客开发教程 16 - 统计文章阅读量
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Java读取Properties文件的六种方法
  • PHP 小技巧
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Spring核心 Bean的高级装配
  • Vim Clutch | 面向脚踏板编程……
  • Vue学习第二天
  • windows下mongoDB的环境配置
  • 网页视频流m3u8/ts视频下载
  • 做一名精致的JavaScripter 01:JavaScript简介
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​插件化DPI在商用WIFI中的价值
  • ###项目技术发展史
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #数据结构 笔记一
  • #微信小程序:微信小程序常见的配置传旨
  • (3)STL算法之搜索
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (独孤九剑)--文件系统
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)Linq学习笔记
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ******之网络***——物理***
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core 依赖注入的基本用发
  • .NET/C# 使窗口永不获得焦点