news 2026/7/7 16:54:12

Qt----事件简述

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qt----事件简述

目录

  • 1,事件的概念
  • 2,事件循环
  • 3,父子控件之间事件的传递处理
  • 4,事件过滤器

1,事件的概念

定义:事件是应用程序内部发生的事情或应用程序需要知道的外部事件的结果。

事件和信号的区别:
事件是由外部向内部,信号是由内部向外部。事件先发生,信号后发生。

2,事件循环

intmain(){do_step1();do_step2();}

等待事件发生之后再退出。

intmain(){while(!is_quit()){do_step1();do_step2();}}


当我们运行程序时,会向操作系统注册回调函数,当有事件发生时,操作系统会调用回调函数,此时会记录发生的事件是那种类型的事件,然后将事件加入到一个消息队列当中,此时一个循环就会处理消息队列中存储的事件,然后根据对应事件去进行逻辑处理。

3,父子控件之间事件的传递处理



以上两个图描述的是Qt负责处理事件处理的类关系图和Qt中常用的处理事件的几种方式。

在实际的项目中会经常处理父子窗口之间的事件传递,那么事件传递的机制是怎样的呢?
以下是两个事件处理函数。

其中Widget是父窗口,MyLineEdit是子窗口。当出现事件时,说先处理子窗口,后处理父窗口。
但是以上的编码实际上在多次出现某种事件之后父窗口的事件只执行了一次。所以需要在子窗口的事件函数中添加代码 event->ignore();
此外重写处理函数时,需要调用基类的处理函数。


有的时候根据需要我们需要事件进行子窗口到父窗口的传递,有时候不需要,那么怎么控制传递呢?
event->ignore(); 允许事件进行子窗口到父窗口的传递。
event->accept(); 阻止事件进行子窗口到父窗口的传递。

4,事件过滤器

通常情况下,一个父窗口中往往会有很多子窗口,而此时发生在这个窗口中的事件需要我们去一 一 处理,很多时候我们需要分清楚这个事件是发生在哪个子窗口中的,这个时候我们就需要事件过滤器去帮助我们判断。

假设我们的父窗口类为 Widget 子窗口类为 MyLineEdit 。

应用事件过滤器,首先要重写
bool QObject::eventFilter(QObject *watched, QEvent *event);函数
其次还要给主窗口安装事件过滤器,
ui->lineEdit->installEventFilter(this);在这个示例里面表示是一个名为lineEdit控件安装事件过滤器。

示例:

bool Widget::eventFilter(QObject*watched,QEvent*event){if(watched==ui->lineEdit){if(event->type()==QEvent::KeyPress){//进行相应逻辑处理}}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 15:31:42

基于单片机的智能收银机模拟系统设计

系统总体设计概述 点击链接下载设计资料:https://download.csdn.net/download/qq_39020934/92091241 1.1 设计背景与应用意义 随着商业零售行业的不断发展,收银机已经成为超市、菜市场以及各类商店中最基础、最重要的设备之一。传统收银方式依赖人工计…

作者头像 李华
网站建设 2026/7/6 16:54:45

Git tag标记Qwen-Image-Edit-2509重要版本里程碑

Qwen-Image-Edit-2509:语义级图像编辑的里程碑演进 在电商运营、社交媒体内容生产和品牌视觉管理日益自动化的今天,一个反复出现的挑战是:如何快速、准确地修改已有图像中的局部内容——比如更换商品标签文字、调整产品外观或移除干扰元素&am…

作者头像 李华
网站建设 2026/7/6 18:15:13

先看段有意思的代码,这是Matlab里魔术公式的典型实现

Matlab魔术轮胎公式,轮胎动力学仿真,包含纯制动,纯转弯,以及制动转弯联合3种工况。 附带参考文献,复现论文代码仿真 可以获得不同轮胎纵向力和滑动率之间的关系,以及不同轮胎侧向力纵向力和侧偏角之间的关系…

作者头像 李华
网站建设 2026/7/7 8:25:25

AXI-A7.4.3 Atomic transactions attribute-Example

Examples of AtomicCompare transactions with a 64-bit data channel are shown in Figure A7.2 上述内容展示了在64位数据通道的AXI总线上,Atomic Compare(原子比较并交换)事务中比较值(C)和交换值(S)在数据总线上的位置分布。这些例子根据传输地址(AWADDR)、传输大…

作者头像 李华
网站建设 2026/7/7 7:26:29

基于单片机的压力机润滑油泵与主电机控制系统设计

系统总体设计概述 点击链接下载设计资料:https://download.csdn.net/download/m0_51061483/92081525 1.1 设计背景与工程意义 压力机作为工业生产中常见的重要设备,广泛应用于冲压、成形、锻造等加工场合,其运行过程对可靠性和安全性要求极…

作者头像 李华
网站建设 2026/7/7 2:41:16

配置静态或默认或动态路由

实验要求 配置静态路由,或默认路由,或动态路由使全网互通 实验步骤配置IP地址 PC1配置PC2配置PC3配置R1的配置 [Huawei]system-view [Huawei]sysname R1 [R1]interface GigabitEthernet 0/0/0 [RGigabitEthernet0/0/0]ip address 192.168.1.10 255.255…

作者头像 李华