Qt扫盲-QEvent 理论总结

news2024/11/15 11:25:18

QEvent 理论总结

  • 一、概述
  • 二、事件类型
    • 1. Qt 已定义类型
    • 2. 开放用户定义类型
  • 三、注册事件

一、概述

Qt的主事件循环(QCoreApplication::exec())从事件队列中获取原生窗口系统事件,将它们转换为QEvents,并将转换后的事件发送给QObjects。

一般来说,事件来自底层的窗口系统 (spontaneous()返回true),但也可以使用 QCoreApplication::sendEvent()和QCoreApplication::postEvent() 手动发送事件(spontaneous()返回false)。

QObject对象通过调用其QObject::event()函数来接收事件。该函数可以在子类中重新实现,以自定义事件处理并添加其他事件类型。在Qt几乎所有的窗口类都是继承了 QObject ,所以我们可以重载 event() 函数去拦截消息。

QWidget::event()就是一个显著的例子。默认情况下,事件被分派给QObject::timerEvent()和 Widget::mouseMoveEvent()这样的事件处理程序。QObject::installEventFilter()允许一个对象拦截发送给另一个对象的事件。

基本的QEvent只包含一个事件类型参数和一个 “accept” 标志。我们可以使用 accept() 设置accept标志,并使用 ignore() 清除。它是默认设置的,但不要依赖它,因为子类可能会选择在其构造函数中清除它。

QEvent 是所有事件类的基类,这个类主要就是维护一个事件的类型,注册事件类型。

二、事件类型

Qt 中 QEvent 维护着事件的基本属性,其中的事件类型是一个枚举值:

QEvent 也提供了 基础的已经预定义好的事件类型,以及开放出来给用户使用的事件类型。

其实就很像 Windows 消息 一样,也是提供自己定义的消息。

1. Qt 已定义类型

这个枚举类型定义了Qt中有效的事件类型。事件类型和每个类型的专用类如下所示:

在这里插入图片描述

非常多,需要查看对应的帮助文档,这个不需要记住,只要会查到怎么使用就好。

2. 开放用户定义类型

用户事件的值应该在User和MaxUser之间:

事件类型含义
QEvent::User1000用户定义的事件的最小值。
QEvent:MaxUser65535最后一次用户事件ID。

为了方便,可以使用 registerEventType() 函数为应用程序注册和保留一个自定义事件类型。这个函数也是静态的,所有用的时候就在全局变量使用的时候注册一个自己要使用的类型就好啦。

这样做可以避免意外重复使用已经在应用程序中其他地方使用的自定义事件类型。

三、注册事件

  • int QEvent::registerEventType(int hint = -1)

这个hint其实就是我们可以预传入的一个事件值,具体的解释如下:

这个函数注册并返回一个自定义事件类型。如果提供的 hint 可用,将使用它,否则它将返回一个介于QEvent::User和QEvent::MaxUser之间的尚未注册的值。如果它的值不在QEvent::User和QEvent::MaxUser之间,则忽略提示 hint 。

如果所有可用值都已被获取,或程序正在关闭,则返回-1。

  • 注意:这个函数是线程安全的。

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

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

相关文章

Multimodal fusion via cortical network inspired losses(第一次优质论文分享)

Multimodal fusion via cortical network inspired losses 论文介绍1. 论文研究的任务是什么?2. 论文关注/拟解决的问题是什么?3. 论文提出什么方法如何解决这个问题?4. 如何设计实验 来证明 所提方法确实解决了 拟解决的问题? 论…

Ada Tutorial(2)SPARK Examiner + SPARK Prover

文章目录 代码 Task1.adb代码 task3.adbtask4.adb 在Ada和SPARK中,SPARK_Mode是一个编译指示,它表示随后的代码将使用SPARK语言规则进行编译和分析。 在with SPARK_Mode > On的影响下,编译器会在编译过程中应用SPARK语言规则,它…

基于“声音”的量子计算机 | Science速递

光子盒研究院 现在,一个基于声音的量子计算机关键构件已被首次被证明是有效的。 构建量子计算机的一种流行方式是将信息编码到光粒子的量子状态中,然后将它们送过镜子和透镜等“迷宫”般的设备阵列来操纵这些信息。量子力学定律指出,量子粒子…

关于B/S结构系统的会话session机制

用户打开浏览器,进行一系列操作,然后最终将浏览器关闭,这整个过程叫做一次会话,会话对象叫session 用户在浏览器上点击了一次超链接或按钮等,称为一次请求,java对象是request session机制属于B/S结构的一部…

项目 引入 uView

只分享干货! 第一点: npm install uview-ui//或yarn add uview-ui 第二点 import Vue from vue; import uView from uview-ui;Vue.use(uView);//或// main.js import uView from /node_modules/uview-ui Vue.use(uView) 第三点 import /node_module…

RK3568开发板 buildroot配置文件

在上一期技术分享中我们学会了如何在buildroot里选中我们自己想要的软件,如vsftpd、openssh等,那么有些客户可能会有疑问,安装完软件后需要配置相应的环境,应该怎么样默认的配置在系统中呢?其实这里的话已经为大家考虑…

python kafka 指定消费者名字

#!/usr/bin/env python # codingutf-8 """ kafka的消费者不是线程安全的,不能多线程启用 kafka不像其他的MQ,消费完数据,直接丢掉,而是会默认存储7天,存储7天后自动清除,故而可以从…

AI虚拟数字人在医学领域的四大应用场景

AI虚拟数字人技术是一种基于计算机图形学和人工智能技术的新型应用,可以模拟人类的外貌、语言、行为等特征,实现与人类的交互。在医疗领域中,AI虚拟数字人技术也有着广泛的应用前景。以下是几个可能的应用场景: 1.医学教育 AI虚拟…

java poi生成excel折线图、柱状图、饼图、动态列表

实现效果 测试类 public class ChartTest {// 开始行public static int chartRowStart 3;// 结束行public static int chartRowEnd 20;public static ChartPosition chartPosition;public static void main(String[] args) throws IOException {// 填充数据XSSFWorkbook work…

30个Python代码,10分钟get常用技巧!

关注“Python专栏”,搜索暗号【面试大全】立即领取面试题简历模板。 学 Python 怎样才最快,当然是实战各种小项目,只有自己去想与写,才记得住规则。本文是 30 个极简任务,初学者可以尝试着自己实现;本文同样…

DVWA-XSS (Stored)

跨站点脚本 (XSS)”攻击是一种注入问题,其中恶意脚本被注入到原本良性和受信任的网站上。 当攻击者使用 Web 应用程序发送恶意代码(通常以浏览器端脚本的形式)时,就会发生 XSS 攻击, 给其他最终…

腾讯云数据库mysql报错sql_mode=only_full_group_by的解决方法

原因:mysql5.6和5.7兼容问题 解决方法: sql_mode“ONLY_FULL_GROUP_BY” 把这个去掉

如何优雅的自动修改node_modules 中的依赖包内容?

使用 patch-package 自动修改 项目中node_modules中内容 背景简介:我们在使用第三方依赖包时如果遇到了 bug,通常解决的方式都是绕过这个问题,使用其他方式解决,较为麻烦。或者给作者提个 issue 或者 PR,然后等待作者的…

真有无限流量上网设备吗?必须是那种真无限流量、不限速的

提到无限流量,七八年前确实有这种说法,而且是官方说法,三大运营商卡套餐都有无限流量这一说。比如当时电信推出过一款99元/月流量无限用的手机卡套餐,移动运营商出过一款89元/月的类似产品,都是打着无限流量的标语&…

Android 13-SystemUI 屏幕左上角或者左上交显示绿色亮点,去掉该亮点

packages/SystemUI/src/com/android/systemui/privacy/PrivacyConfig.kt private const val DEFAULT_MIC_CAMERA false 改成false就好了

Randoop随机测试自动生成测试用例

什么是Randoop: Randoop是一个为JAVA单元测试生成测试用例的框架(生成器),它基于Junit格式为编译后JAVA字节码(classes)自动生成测试用例. Randoop通过反馈式的随机测试来生成测试用例,由于测…

工程项目管理常用的软件有哪些?

工程项目管理常用的软件有哪些? 市面上的项目管理工具各种类型的都有,各自也有各自的优势和特点,但是“一千个人眼里有一千个哈姆雷特”,A企业觉得好用的项目管理工具不一定适合B企业。 一般来说,企业在进行系统工具…

蚁群优化算法

目录 蚁群优化 Quadratic Assignment Problem (QAP) 主要代码 create model Cost RouletteWheelSelection Plot 结果 蚁群优化 蚁群优化(ACO)是一套概率元启发法和智能优化算法,其灵感来源于蚂蚁的社会行为。ACO算法也被归类为群集智能…

电脑系统可以直接备份到其它硬盘上吗

在日常使用电脑的过程中,我们都希望能够保护好重要的系统数据,以防止意外数据丢失或系统崩溃。那么,能否将电脑系统直接备份到其他硬盘上呢?本文将为您解答这个问题,并探讨备份系统的方法和注意事项。 工具/原料&…

Kubernetes通过滚动更新deployment实现金丝雀发布

如果要使用 Deployment 向用户子集或服务器子集上线版本, 则可以遵循资源管理所描述的金丝雀模式, 创建多个 Deployment,每个版本一个。 所谓金丝雀发布(Canary Release),就是第一个新的 Pod 创建完成后立…