qt-C++笔记之打印所有发生的事件

qt-C++笔记之打印所有发生的事件

code review!

文章目录

  • qt-C++笔记之打印所有发生的事件
    • 1.ChatGPT问答
      • 使用 QApplication 的 notify 方法
      • 使用 QObject 的 event 方法
    • 2.使用 QObject 的 event 方法
    • 3.使用 QApplication 的 notify 方法

1.ChatGPT问答

在Qt C++中,若要打印所有发生的事件,您可以通过重写QObjectevent函数或者QApplicationnotify函数来实现。这两个方法都可以截获事件循环中的事件,但是通常更推荐使用notify方法,因为它可以捕获到传递给任何对象的所有事件。

使用 QApplication 的 notify 方法

为了打印所有事件,您可以继承QApplication类并重写其notify方法。下面是一个简单的例子:

#include <QApplication>
#include <QDebug>
#include <QEvent>class MyApplication : public QApplication {
public:MyApplication(int &argc, char **argv): QApplication(argc, argv) {}bool notify(QObject *receiver, QEvent *event) override {// 打印事件类型和接收对象的名称qDebug() << "Event Type:" << event->type() << "Receiver:" << receiver->objectName();// 调用基类的 notify 方法继续正常的事件传递return QApplication::notify(receiver, event);}
};int main(int argc, char *argv[]) {MyApplication app(argc, argv);// ... 创建窗口和其他组件 ...return app.exec();
}

在这个重写的notify方法中,您可以看到事件类型和接收事件的对象名称。您需要记得调用基类的notify方法以确保事件继续被正常处理。

使用 QObject 的 event 方法

如果您只想监控某个特定对象的事件,您可以重写该对象的event方法:

#include <QObject>
#include <QDebug>
#include <QEvent>class MyObject : public QObject {
public:MyObject(QObject *parent = nullptr) : QObject(parent) {}protected:bool event(QEvent *event) override {// 打印事件类型qDebug() << "Event Type:" << event->type();// 调用基类的 event 方法继续正常的事件处理return QObject::event(event);}
};// 使用 MyObject 的实例

这种方法只会打印传递给MyObject实例的事件。

在打印事件时,记得event->type()返回的是QEvent::Type枚举值,您可能需要转换这个值为人类可读的形式,可以通过创建一个映射表或者在调试时查找对应的枚举名称。

请注意,打印所有事件可能会导致大量的输出,这可能会影响应用程序的性能,因此这通常只在调试时使用。在生产环境中,您应该禁用或删除这些调试输出。

2.使用 QObject 的 event 方法

在这里插入图片描述

#include <QCoreApplication>
#include <QDebug>
#include <QEvent>
#include <QObject>
#include <QTimerEvent>class MyObject : public QObject {
public:MyObject(QObject *parent = nullptr) : QObject(parent) {}protected:bool event(QEvent *event) override {// 打印事件类型和对象名称qDebug() << "Event Type:" << event->type() << "Object:" << this->objectName();// 调用基类的 event 方法继续正常的事件处理return QObject::event(event);}void timerEvent(QTimerEvent *event) override {// 重写 timerEvent 来处理计时器事件qDebug() << "Timer Event:" << event->timerId();// 调用基类的 timerEvent 方法QObject::timerEvent(event);}
};int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);// 创建 MyObject 实例MyObject obj;obj.setObjectName("MyObject"); // 设置对象名称以便在调试输出中识别// 开始一个计时器int timerId = obj.startTimer(1000); // 1000毫秒// 进入事件循环return app.exec();
}

3.使用 QApplication 的 notify 方法

在这里插入图片描述

#include <QApplication>
#include <QDebug>
#include <QEvent>
#include <QWidget>class MyApplication : public QApplication {
public:MyApplication(int &argc, char **argv): QApplication(argc, argv) {}bool notify(QObject *receiver, QEvent *event) override {// 打印事件类型和接收者的名称qDebug() << "Event Type:" << event->type()<< "Receiver:" << (receiver ? receiver->objectName() : "NULL");// 调用基类的 notify 方法以继续正常的事件分发return QApplication::notify(receiver, event);}
};int main(int argc, char *argv[]) {MyApplication app(argc, argv);QWidget window;window.setObjectName("MainWindow"); // 为了在调试输出中识别,设置窗口的对象名称window.setWindowTitle("Event Printer Example"); // 设置窗口标题window.show(); // 显示窗口return app.exec(); // 进入事件循环
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派5 EEPROM引导加载程序恢复镜像

树莓派5不能正常启动&#xff0c;可以通过电源led灯的闪码来判断错误发生的大致情形。 LED警告闪码 如果树莓派由于某种原因无法启动&#xff0c;或者不得不关闭&#xff0c;在许多情况下&#xff0c;LED会闪烁特定的次数来指示发生了什么。LED会闪烁几次长闪烁&#xff0c;然…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 2月17日,星期六

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年2月17日 星期六 农历正月初八 1、 中疾控&#xff1a;我国自主研发的猴痘mRNA疫苗即将进入临床试验。 2、 2024年度总票房破100亿元&#xff0c;其中春节档已突破70亿元。 3、 国产大飞机首次国外亮相&#xff0c;C919已抵…

自动化测试-RIDE编写自动化脚本

自动化脚本软件测试的必修内容&#xff0c;是自动化测试的核心&#xff0c;脚本的逻辑严谨性、可维护性非常重要&#xff0c;优秀的自动化脚本需要能兼顾用例的正确有效性和自动化测试的效率&#xff0c;本篇文章将介绍如何用RIDE写自动化脚本。我们将深入探讨RIDE的具体用法&a…

Python hash函数

在Python编程中&#xff0c;hash()函数是一个重要的内置函数&#xff0c;用于计算对象的哈希值。哈希值是一种由固定长度的字符串表示的数据摘要&#xff0c;通常用于在散列表中快速查找、比较对象或数据完整性验证等场景。本文将深入探讨Python中的hash()函数&#xff0c;包括…

The method toList() is undefined for the type Stream

The method toList() is undefined for the type Stream &#xff08;JDK16&#xff09; default List<T> toList() { return (List<T>) Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray()))); }

HarmonyOS一杯冰美式的时间 -- 验证码框

一、前言 像是短密码、验证码都有可能需要一个输入框&#xff0c;像是如下&#xff1a; 恰好在写HarmonyOS的时候也需要写一个验证码输入框&#xff0c;但是在实现的时候碰了几次灰&#xff0c;觉得有必要分享下&#xff0c;故有了此篇文章。 如果您有任何疑问、对文章写的不…

Compose 自定义 - 约束 Constrains

一、概念 是当前节点宽高的上下界&#xff08;最大值和最小值&#xff09;。在 Layout 阶段&#xff0c;当父节点测量子节点的时候会把 Contraints 往下传递&#xff0c;好让子元素知道自己被允许的最大最小尺寸&#xff0c;当所有子元素被测量完成后开始决定自身尺寸时&#x…

STM32

Unix时间戳 BKP 读写备份寄存器 main.c #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Key.h"uint8_t KeyNum;uint16_t ArrayWrite[] {0x1234,0x2134}; uint16_t Arr…

【深度学习】Pytorch 系列教程(三):PyTorch数据结构:2、张量的数学运算(1):向量运算(加减乘除、数乘、内积、外积、范数、广播机制)

文章目录 一、前言二、实验环境三、PyTorch数据结构0、分类1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算…

Linux下解压tar.xz文件的命令

tar -c: 建立压缩档案-x&#xff1a;解压-t&#xff1a;查看内容-r&#xff1a;向压缩归档文件末尾追加文件-u&#xff1a;更新原压缩包中的文件 ------------------------------------------ 这五个是独立的命令&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和别的…

互联网加竞赛 基于计算机视觉的身份证识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-sen…

​StableSwarmUI#超越文本的prompt

今天看到一个新的webui方案&#xff0c;是Stability-AI开源的&#xff1a; StableSwarmUI 是一个模块化的稳定扩散web用户界面&#xff0c;着重于使强大的工具易于访问、高性能和可扩展性。 由于项目还在开发中&#xff0c;我们可以先了解下&#xff0c;翻看了它的特点&#xf…