首页 > 其他分享 >QObject Event( )customEvent( ) 函数区别

QObject Event( )customEvent( ) 函数区别

时间:2024-11-19 15:09:02浏览次数:1  
标签:函数 自定义 QEvent 事件 customEvent QObject event Event

事件处理流程中的角色

event函数

        event函数是QObject中事件处理的总入口。当有任何事件传递到一个QObject或者它的派生类对象时,这个函数首先被调用。它就像是一个事件调度中心,负责接收各种各样的事件,并根据事件的类型把它们分发给对应的具体处理函数。
        例如,对于鼠标按下事件(QEvent::MouseButtonPress)、键盘按键事件(QEvent::KeyPress)等常见事件,event函数会检查事件类型,然后调用相应的特定事件处理函数,如mousePressEvent、keyPressEvent等。

customEvent函数

        customEvent函数主要用于处理自定义事件。当开发者定义了自己的事件类型(通过继承QEvent类),并使用QCoreApplication::postEvent或QCoreApplication::sendEvent来发送这些自定义事件时,customEvent函数就会发挥作用。它是一个专门为处理自定义事件而预留的函数。
事件类型的关联
    event函数
        处理所有类型的QEvent及其派生类事件。它可以识别多种预定义的标准事件类型,如定时器事件(QEvent::Timer)、窗口激活事件(QEvent::WindowActivate)等众多事件类型。通过对event->type()返回值的判断,可以将事件分发给对应的处理逻辑。
    customEvent函数
        通常关联自定义事件类型。自定义事件类型的值一般是大于QEvent::User的整数(QEvent::User是一个用于自定义事件的起始标记)。当event函数判断出传入的事件类型是自定义事件类型时,会将事件传递给customEvent函数进行处理。
使用场景
    event函数
        适用于对标准事件的集中处理和分发。如果需要在对象级别对所有传入的事件进行统一的前置处理,或者修改事件的处理流程(比如拦截某些事件或者修改事件参数后再分发),就可以在event函数中实现。例如,在一个窗口类中,可以在event函数中记录所有事件的发生时间,用于性能分析或者事件日志记录。
    customEvent函数
        用于处理应用程序特定的自定义事件逻辑。比如在一个复杂的多线程图形应用程序中,自定义一个事件用于通知某个图形对象需要从后台线程更新其数据。通过自定义事件和customEvent函数,可以在不干扰标准事件处理流程的情况下,实现特定的、应用程序独有的交互逻辑。
示例代码对比
    event函数示例

bool MyWidget::event(QEvent *event)
{
if (event->type() == QEvent::MouseButtonPress)
{
QMouseEvent mouseEvent = static_cast<QMouseEvent>(event);
if (mouseEvent->button() == Qt::LeftButton)
{
qDebug() << "Left mouse button pressed";
return true;
}
}
return QWidget::event(event);
}

这个event函数在MyWidget类中重写,用于处理鼠标按下事件。当检测到鼠标左键按下时,输出一条调试信息,并返回true表示事件已经被处理;否则,将事件传递给基类QWidget的event函数继续处理。
customEvent函数示例

cpp
复制

class MyCustomEvent : public QEvent
{
public:
MyCustomEvent(int data) : QEvent(static_castQEvent::Type(QEvent::User + 1)), m_data(data) {}
int getData() const { return m_data; }
private:
int m_data;
};
void MyWidget::customEvent(QEvent *event)
{
if (event->type() == QEvent::User + 1)
{
MyCustomEvent customEvent = static_cast<MyCustomEvent>(event);
qDebug() << "Custom event data: " << customEvent->getData();
}
}

首先定义了一个自定义事件类MyCustomEvent,它继承自QEvent,并带有一个自定义的数据成员。在MyWidget类的customEvent函数中,当接收到自定义事件类型(QEvent::User + 1)的事件时,将事件转换为MyCustomEvent类型,然后获取并输出其中的数据。

对于自定义事件 User+n 可以只重载定义 customEvent函数 ,系统会自动调用。

对于如果要监听系统事件则需要重载 event函数

标签:函数,自定义,QEvent,事件,customEvent,QObject,event,Event
From: https://www.cnblogs.com/keleman/p/18554919

相关文章

  • WPF Datagrid event command in mvvm via behavior
    <DataGridTemplateColumnHeader="Image"><DataGridTemplateColumn.CellTemplate><DataTemplate><StackPanelOrientation="Horizontal"><CheckBoxIsThree......
  • Spring监听器之@EventListener
    Spring监听器目录Spring监听器一、两种使用最经典的使用方式1.1、首先定义事件类1.2、发送事件所表示的业务实体1.3、第一种方式:实现接口监听器1.4、第二种方式:实现注解监听器1.5、测试1.6、结果二、接口监听器添加原理2.1、接口方式注册监听器initApplicationEventMulticaster()......
  • QObject,QMainWindpw,QWidget,QDialog介绍
    QObjectQObject的角色和特点在Qt框架中,QObject是整个对象模型的核心基类,它为Qt对象树和信号-槽机制提供了基础支持。很多Qt的类(包括QWidget、QDialog、QMainWindow)都直接或间接继承自QObject。QObject的核心功能对象树管理(ObjectTree)QObject提供了父子关......
  • CSS3 超实用属性:pointer-events(可穿透图层的鼠标事件)
    1、是什么pointer-events 直译为指针事件,该属性指定在什么情况下某个DOM可以成为鼠标事件的target。简而言之,就是允许/禁止DOM的鼠标事件(click事件、hover事件、mouse事件等鼠标事件)2、具体属性分析用法分析:pointer-events:auto|none|visiblePainted|visibleFill|......
  • MIGO DUMP LCX_RAP_EVENT_RUNTIME CL_RAP_EVENT_MANAGER==========CP
    MIGO收货时发生DUMP运行事务代码:SBGRFCCONF创建入站目标输入目标BGPF 保存即可 TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRussianChineseTraditi......
  • Spring-Event入门实践及执行原理
    一、入门案例1.添加依赖首先,在pom.xml文件中添加SpringBoot和SpringEvent的依赖:<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></depende......
  • 中间件全球数据实时同步利器,EventGrid事件流重磅发布
    EventGrid事件流(简称EG)作为易用、稳定、高效的数据同步管道连接不同的系统与服务,支持中间件在线同步和实时同步。事件流围绕云中间件,降低了中间件之间数据流通的复杂性,有效地帮助您减少数据传输的成本。适用于上云、跨云数据搬迁和跨云、跨地域备份容灾等场景,为企业上云和容灾业务......
  • FreeRTOS 24:事件组EventGroup等待、清零、获取操作
    等待事件标志位xEventGroupWaitBits()既然标记了事件的发生,那么我怎么知道他到底有没有发生,这也是需要一个函数来获取事件是否已经发生,FreeRTOS提供了一个等待指定事件的函数——xEventGroupWaitBits(),通过这个函数,任务可以知道事件标志组中的哪......
  • Spring带泛型的ApplicationEvent无法监听问题分析(转载)
    1背景在开发过程中,经常遇到发送事件来通知其他模块进行相应的业务处理;笔者实用的是spring自带的ApplicationEventPublisher和EventListener进行事件的发收;但是开发时遇到一个问题:如果事件很多,但是事件模式都差不多,就需要定义很多事件类来分别表示各种事件,例如,我们进行数据同步......
  • 事件循环(Event loop)
    一、什么叫事件循环事件循环也就是Eventloop,是JavaScript或Node为解决单线程代码执行不阻塞主进程一种机制,也就是我们所说的异步原理。事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。二、什么是进程与线程?进程是计算机中正在运行的程序的一个实例;每个进程......