QEvent类

Qt Event(Qt事件) 1.事件定义 事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标,敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件是在对用户操作做出响应的时候发出,如键盘事件等;另一些事件则是由系统自动发出,如计时器事件。 2.事件与信号槽 一般来说,使用 Qt 编程时,我们并不会把主要精力放在事件上,因为在 Qt 中,需要我们关心的事件总会发出一个信号。比如,我们关心的是 QPushButton 的鼠标点击,但我们不需要关心这个鼠标点击事件,而是关心它的 clicked( 阅读详情

QEvent 类是所有事件类的基类。事件对象包含事件参数。


Header:#include <QEvent>
CMake:find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake:QT += core
Inherited By:

QActionEvent

QChildEvent

QCloseEvent

QDragLeaveEvent

QDropEvent 

QDynamicPropertyChangeEvent

QExposeEvent

QFileOpenEvent

QFocusEvent, 

QGestureEvent

QGraphicsSceneEvent >

QHelpEvent

QHideEvent

QIconDragEvent 

QInputEvent

QInputMethodEvent

QInputMethodQueryEvent

QMoveEvent

QPaintEvent >

QPlatformSurfaceEvent

QResizeEvent

QScrollEvent

QScrollPrepareEvent

QShortcutEvent 

QShowEvent

QStateMachine::SignalEvent

QStateMachine::WrappedEvent

QStatusTipEvent

QTimerEvent

QWhatsThisClickedEvent

QWindowStateChangeEvent


【详细描述】

★ Qt主事件循环(QCoreApplication::exec()) 从事件队列中获取本地窗口系统事件,将它们转换为QEvent,并将转换后的事件发送到各 QObject。

Qt中的事件会经过:派发 -> 过滤 -> 分发 -> 处理,4个阶段。

Qt对窗口中发生的事件有一系列的默认处理动作,用户可以在适当位置重写这些事件虚函数。

每个Qt应用程序都有一个唯一的QApplication应用程序对象,继承于QCoreApplication,调用它的exec()函数,便开启了Qt框架内部的事件循环机制。

int main(int argc,char* argv[])
{
    QApplication a(argc,argv);  //有且唯一的应用程序对象
    MainWindow* w = new MainWindow; 
    w.show();
    return a.exec();            //开启消息循环机制,进行事件的派发
}

Qt中产生事件后通过如下过程分发:

1.【派发】当事件产生后,通过QApplication应用程序对象调用重写的虚函数notify()将事件分发到指定的窗口:

//QObject *receiver 指向事件接收者,QEvent *e 指向产生的事件
[override virtual] bool QApplication::notify(QObject *receiver,QEvent *e)

2.【过滤】事件发送过程中,可以通过事件过滤器eventFilter()进行过滤,默认不过滤任何事件。

//QObject *watched指向要过滤事件的对象,QEvent *event指向要被过滤的事件
[virtual]bool QQbject::eventFilter(QObject *watched,QEvent *event)

3.【分发】未被过滤的事件会发送到指定的窗口,窗口的事件分发器event()会对收到的事件进行分类,并调用对应的事件处理器函数:

//QEvent *event指向应用程序派发且未被过滤的事件,分类后转给事件处理函数
[override virtual protected] bool QWidget::event(QEvent *event)

4.【处理】分类后的事件会交由对应的事件处理器函数,每个事件处理函数都有默认的处理动作,用户也可以重写这些事件处理函数,例如:

//鼠标按下
void QWidget::mousePressEvent(QMouseEvent *event)
//鼠标释放
void QWidget::mouseReleaseEvent(QMouseEvent *event)
//鼠标移动
void QWidget::mouseMoveEvent(QMouseEvent *event)
  • 上述事件处理函数都是“回调”函数,其调用过程由Qt框架完成,无需程序员干预。
  • 上述4个环节中事件处理器函数经常由程序员重写,以实现具体功能,它们主要分布在两个位置QObject类和QWidget类,前者只有一个timerEvent()定时器虚函数,后者有二十多个。

★ 通常,事件来自底层窗口系统 (系统事件,spontaneous() 返回真),但也可以使用 QCoreApplication::sendEvent()和QCoreApplication::postEvent() (应用程序内部事件,spontaneous() 返回假)。

★ QObjects 通过调用事件的 QObject::event() 函数来接收事件,该函数可以在子类中重新实现,以便自定义事件处理并添加其他事件类型。

★ QObjects 默认情况下,事件被调度给事件处理程序,如  QObject::timerEvent() 和 QWidget::mouseMoveEvent()。

★ QObject::installEventFilter() 允许一个对象截获发往另一个对象的事件。

★ QEvent 仅包含一个事件类型参数和一个“accept”标志,可以使用  accept() 设置或使用 ignore() 清除的 accept 标志。

accept 是默认设置的,但不要依赖它,因为子类可能会选择在其构造函数中清除它。

参阅 QObject::event(), QObject::installEventFilter(), QCoreApplication::sendEvent(), QCoreApplication::postEvent(), QCoreApplication::processEvents().


【公共类型】(枚举)

enumType { None, ActionAdded, ActionChanged, ActionRemoved, ActivationChange, …, MaxUser }该枚举类型定义了Qt中的有效事件,共140个左右。

【属性】

该属性保存事件对象的接受标志。


【公有函数】

QEvent(QEvent::Type type)构造type类型的事件对象。
virtual~QEvent()析构。如果是 posted,它将从要发布的事件列表中删除。
voidaccept()

事件对象的 accept 标志。

virtual QEvent *clone() const创建并返回此事件的相同副本。
voidignore()

清除事件对象的 accept 标志,等效于调用  setAccepted(false)。

清除 accept 参数表示事件接收器不需要该事件。不需要的事件可能会传递到父控件。

boolisAccepted() const访问函数,查看accept 。
boolisInputEvent() const如果事件对象是QInputEvent或者它的一个子类则返回true。
boolisPointerEvent() const如果事件对象是QSinglePointEvent则返回true。
boolisSinglePointEvent() const如果事件对象是QSinglePointEvent则返回true。
virtual voidsetAccepted(bool accepted)

设置事件对象的 accept 标志,等效于调用 setAccepted(true)。

设置 accept 参数表示事件接收器需要该事件。不需要的事件可能会传递到父控件。

boolspontaneous() const如果事件源自应用程序外部(系统事件),则返回真,否则返回假。
QEvent::Typetype() const返回事件类型。

【静态公有成员】

intregisterEventType(int hint = -1)

注册并返回自定义事件类型。如果 hint 提供的值可用,则使用它,否则它将返回一个 QEvent::User 和 QEvent::MaxUser 之间(1000-65535)尚未注册的值。如果 hint 的值不在 QEvent::User 和 QEvent::MaxUser之间,则忽略 。

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


<<<返回根页面

QT基础教程(QEvent事件和事件过滤器) 本篇文章将带大家来学习QT中的QEvent事件,QEvent 是 Qt 框架中的一个核心类,用于处理各种事件。在 Qt 的事件处理系统中,事件是与用户交互或系统状态变化相关的信息,例如鼠标点击、键盘输入、窗口重绘等。1.事件的种类QEvent 是一个抽象基类,实际的事件类型通过继承 QEvent 创建。例如,QMouseEvent、QKeyEvent、QPaintEvent 等都继承自 QEvent。每种事件类型都有特定的功能和数据,提供对相关事件的详细信息。2.事件的传递。 阅读详情

相关推荐

PyQt学习笔记:Qt事件处理QEvent详解python

常用的处理函数有mousePressEvent()、mouseReleaseEvent()、mouseMoveEvent()和wheelEvent()。QEvent是Qt中的事件类,它封装了事件的类型、状态和发送者等信息。当Qt应用程序中发生事件时,操作系统会将这些事件发送给应用程序,应用程序需要使用QEvent接收并处理这些事件,以完成相应的功能。在上述示例代码中,创建了一个继承自QWidget的自定义窗口部件MyWidget,并在其构造函数中设置了固定的大小和事件过滤器。二、QEvent的常见类型。

与其临渊羡鱼,不如退而结网 982

Qt5 事件(event)机制详解

1.简述 个人认为,事件机制是Qt最难以理解且最为精妙的一部分。事件主要分为两种: 在与用户交互时发生。比如按下鼠标(mousePressEvent),敲击键盘(keyPressEvent)等。 系统自动发生,比如计时器事件(timerEvent)等。 在发生事件时(比如说上面说的按下鼠标),就会产生一个QEvent对象(这里是QMouseEvent,为QEvent的子类),这个QEvent对象会传给当前组件的event函数。如果当前组件没有安装事件过滤器(这个下文会提到),则会被event函数...

WCLEndless的博客 2654

【QT开发】事件处理QEvent类详解及实战应用

QEvent是Qt提供的一个功能强大且灵活的事件处理机制,通过本篇文章的学习,你应该对QEvent有了全面的理解,能够在自己的项目中正确使用它。QEvent在用户界面中帮助你更好地处理各种事件,实现交互式和响应式的应用程序,有助于创建用户友好和高效的界面。

科技改变人类,技术成就未来 710

QEvent(事件)

事件先传递给获得焦点的窗口部件,如果该部件忽略掉该事件,那么这个事件会传递给这个部件的父部件。重新实现事件处理函数时,一般要调用父类的相应事件处理函数来实现默认操作。一个事件是由一个特定的QEvent子类来表示的,但一个事件又可以包含多个事件类型。当焦点在line中时按下回车,只会触发myline的事件,并不会传递。在mylineedit.h添加一个按键按下的事件。这样的话就把继承关系修改为QLineEdit。创建一个项目,继承于QWidget。修改mylineedit的事件。常用的方法为第一个和第五个。

qq_45303986的博客 2093

Qt QEvent类详解:从基础到实战

本文详细介绍了Qt框架中的QEvent类及其事件处理机制。QEvent作为所有事件类的基类,封装了事件的基本信息,包括事件类型、接受状态等。文章阐述了QEvent的核心方法、常用事件类型枚举,以及三种主要的事件处理方式:重写特定事件处理函数、重写event()函数和使用事件过滤器。此外,还介绍了自定义事件的创建与处理方法,并通过拖拽标签的实战案例展示了事件处理的实际应用。最后总结了QEvent在构建交互式GUI应用中的关键作用,强调合理使用事件传播机制对提升用户体验的重要性。掌握这些内容对开发响应灵敏的Qt

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 212

Flash芯片的VCC上电到可操作时间过长

Flash的VCC上电到操作时间(tVSL)通常有最大值限制,如果超过这个时间,核心风险是状态机不同步和指令锁存错误。比如芯片内部振荡器可能已经尝试启动又休眠了,但主控却在这之后才发送指令,导致完全 misinterpreted。Flash芯片的(从电源上电到可以正常进行读写操作的时间)如果过长,会产生一系列负面影响简单来说,这个时间过长意味着电源上升速度太慢,违反了芯片的要求。

qq_61918649的博客 722

QEvent类参考

QEvent类参考 QEvent类是所有事件类的基类。事件对象包含事件参数。 #include 详细介绍            QEvent类是所有事件类的基类。事件对象包含事件参数。         Qt的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件,将它们封装进QEvent中,并且将封装好的事件发送给QObjects。

chenlong12580的专栏 7027

从HPPC测试到Simulink仿真:锂电池二阶RC模型参数辨识完整流程

本文详细介绍了从HPPC测试到Simulink仿真的锂电池二阶RC模型参数辨识完整流程。通过HPPC测试获取实验数据,利用Simulink的Parameter Estimation工具进行参数辨识和模型验证,为BMS算法开发提供精确的电池模型。文章涵盖测试设计、数据预处理、模型搭建及工程应用等关键步骤,助力新能源电池研发。

whisky的博客 683

QEvent类详细介绍

python。

wanglaqqqq的博客 1080

EPLAN Electric P8 2025安装避坑指南:硬件、.NET 6与VM配置全解析

EPLAN Electric P8 是面向工业自动化电气设计的工程级CAD平台,其核心依赖于.NET运行时、DirectX硬件加速与本地许可证验证机制。随着2025版升级至.NET 6.0 Runtime、DirectX 12渲染引擎及双模授权校验,安装失败率显著上升——尤其在显卡驱动陈旧、虚拟机环境或企业离线场景下。技术价值在于保障PLC柜体布局、端子排自动生成、电缆清册输出等产线级功能稳定运行;典型应用场景包括高校电赛控制系统设计、包装线电控图纸交付及集成商多版本协同部署。本文聚焦EPLAN 2025安

weixin_30897079的博客 556

利用HTML+CSS设计PPT:html-to-pptx实现自动化转换与可编辑输出

在办公自动化和前端开发领域,将网页技术应用于文档生成是一个重要的技术方向。其核心原理在于通过解析HTML/CSS的结构与样式,将其映射为目标文档的原生对象模型。这项技术的价值在于,它能够将Web技术栈强大的布局与样式能力(如Flexbox、CSS Grid)与办公软件(如Microsoft PowerPoint)的广泛兼容性和可编辑性相结合。在实际应用场景中,这种技术特别适合需要快速生成兼具设计感与实用性的演示文稿,例如数据报告、产品发布和营销材料。本文探讨的html-to-pptx项目正是这一思路的工程实

weixin_30652491的博客 486

PyQt6/PySide6 的 QEvent 类

PyQt6/PySide6 的 QEvent 类

燃灯工作室 1134

跟着团子学SAP CO:揭秘结果分析码在项目结算中的实战应用(一)KKA2/CJ88

本文深入解析了SAP CO模块中结果分析码在项目结算中的核心作用。以KKA2(方法10)和事务代码CJ88为例,详细阐述了如何在项目完工后一次性确认收入的场景下,通过结果分析功能实现收入与成本的精准匹配,将项目成本暂估为在制品,确保各期利润的准确反映。

gamma的博客 685

Qt-QEvent类

文章目录详细描述通用文档accepted:bool成员函数描述QEvent::QEvent(QEvent::Type type)QEvent::~QEvent()void QEvent::accept()void QEvent::ignore() QEvent是一个所有事件的基类,每一个对象都会包含一个事件参数 详细描述 Qt的主要事件循环(QCoreAppliaction::exec())从事件...

赵树成的博客 600

数学不好是原罪——高等数学笔记(汇总版)

这是本人之前考研的高数手写笔记,工科学硕数一考了146(满分150),笔记有一定参考价值,欢迎大家收藏借鉴。

xuuyann 5万+

【100%通过率】华为OD机试真题 Python 实现【投篮大赛】【2022.11 Q4 新题】

你现在是一场采用特殊赛制投篮大赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中ops[i]是你需要记录的第i项操作,ops遵循下述规则: 整数x-表示本回合新获得分数x “+” – 表示本回合新获得的得分是前两次得分的总和。 “D” – 表示本回合新获得的得分是前一次得分的两倍。 “C” – 表示本回合没有分数,并且前一次得分无效,将其从记录中移除。 请你返回记录中所有得分的总和。

MISAYAONE的博客 1万+

QEvent整理归纳:140种类型,29个继承类,7个函数,3种事件来源

目录   140种事件类型 29个事件继承类 7个事件自带函数 几个关键的事件处理函数 140种事件类型 QEvent::None QEvent::AccessibilityDescription QEvent::AccessibilityHelp QEvent::AccessibilityPrepare QEvent::ActionAdded QEvent::Actio...

冷月醉雪的博客 1224

【AI Agent系列】【MetaGPT】9. 一句话订阅专属信息 - 订阅智能体进阶,实现一个更通用的订阅智能体(2)

订阅智能体进阶(2)。不用爬虫,直接提取网页信息。从RunSubscription分离出AddSubscriptionTask的action,并且让SubscriptionRunner单独运行。

同学小张的博客 1587

QEvent类在Qt框架中的作用与特性(ai对话)

Kimi: 是的,当Qt中的事件被产生后,`QApplication` 类的 `notify` 方法会被调用。这个方法是 `QCoreApplication` 类中的一个虚函数,`QApplication` 继承了 `QCoreApplication` 并重写了 `notify` 方法。1. **事件类型**:QEvent类定义了一个枚举类型`Type`,列出了所有可能的事件类型,例如`QEvent::MouseButtonPress`、`QEvent::KeyPress`等。

weixin_62594908的博客 439

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

继承QEvent类实现自定义事件

1.继承自QEvent类的实现.h文件#ifndef REFRESHDATAEVENT_H #define REFRESHDATAEVENT_H #include &lt;QEvent&gt; class RefreshDataEvent:public QEvent { public: RefreshDataEvent(); public: static const Typ...

aristolto的专栏 1134

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

QEvent和它的涉及类继承体系和设计思想

本文系统介绍了Qt框架中的QEvent事件系统。QEvent作为Qt事件驱动模型的核心基类,封装了各类事件信息,具有类型标识、接受/忽略状态和跨线程传递等特性。文章详细解析了QEvent的继承体系(包括输入事件、窗口事件、绘制事件等子类)、事件处理流程(产生→分发→过滤→处理→传递)以及自定义事件实现方法。重点阐述了Qt事件系统的设计思想:面向对象封装、多态处理、层次化分发、过滤机制和同步/异步发送机制。这些设计使Qt能够灵活处理用户交互和系统通知,同时提供丰富的扩展点,是其响应性和可定制性的关键所在。

红军不怕远征难,万水千山只等闲 1085

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

qt QEvent详解

QEvent是Qt框架中事件机制的基础类。在Qt中,事件是由底层窗口系统(如Windows、Linux的X11、macOS的Cocoa等)生成的,Qt的主事件循环(QCoreApplication::exec())负责从事件队列中获取这些事件,并将它们转换为QEvent对象,然后发送给相应的QObject对象进行处理。QEvent类是所有事件类的基类,它包含了事件的基本信息,如事件类型、是否已被接受等。Qt通过QEvent类及其子类来实现各种事件的处理,如鼠标事件、键盘事件、定时器事件等。

ckg3824278的博客 1097
上一篇: QTimer类
下一篇: QObject类
floatbit
博客等级 码龄24年 460粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值