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.mzph.cn/news/686156.shtml

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

相关文章

老兵(11)

百度文心一格&#xff0c;大约是一年前上线并免费向用户开放的。其实也不是免费&#xff0c;而是“电量”比较好获得&#xff0c;白送的就16/每天&#xff0c;如果只是好奇玩玩的话也算够吧。 当时就很开心&#xff0c;因为一直想着把一些文案图像化&#xff0c;做成漫画的形式…

从被“大V”忽悠到自主开发投资分析系统:我在基金投资中的跌宕起伏与转变

从被“大V”忽悠到自主开发投资分析系统&#xff1a;我在基金投资中的跌宕起伏与转变 回顾我初次涉足基金投资的经历&#xff0c;那是一段由盲目跟从、亏损惨重到痛定思痛、自我提升的曲折历程。起初&#xff0c;我深受某些财经“大V”的影响&#xff0c;他们凭借看似精准的市…

算法刷题:复写零

复写零 .习题链接题目描述算法原理初始值步骤1步骤2我的答案: . 习题链接 复写零 题目描述 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&#xff1a;请不要在超过该数组长度的位置写入元素…

LEETCODE 164. 破解闯关密码

class Solution { public:string crackPassword(vector<int>& password) {vector<string> password_str;for(int i0;i<password.size();i){password_str.push_back(to_string(password[i]));}//希尔排序int gappassword.size()/2;while(gap>0){for(int i…

Eclipse Version: 2023-03 (4.27.0) JDK19 Tomcat10.2

Eclipse Version: 2023-03 (4.27.0) JDK19 Tomcat10.2

C语言学习day15:数组强化训练

题目一&#xff1a; 称体重&#xff1a;分别给10个值&#xff0c;来获得最大值 思路&#xff1a; 定义数组&#xff0c;给数组内赋10个值第一个下标的值与第二个下标的值进行比较定义max&#xff0c;将比较得来的较大的值赋值给max一直比较直到比较到最后一个下标&#xff0…

Redis篇----第三篇

系列文章目录 文章目录 系列文章目录前言一、缓存雪崩**二、缓存穿透三、缓存预热四、缓存更新五、缓存降级 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女…

【plt.scatter绘制散点图】:从入门到精通,只需一篇文章!【Matplotlib】

【plt.scatter绘制散点图】&#xff1a;从入门到精通&#xff0c;只需一篇文章&#xff01;【Matplotlib】&#xff01;&#x1f680; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; 一、plt.scatter入门&#xff1a;轻松迈出第一步 &#x1f463;二、…

后端学习:Maven模型与Springboot框架

Maven 初识Maven Maven:是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 Maven的作用1.依赖管理2.统一项目结构3.项目构建依赖管理&#xff1a;方便快捷的管理项目依赖的资源(jar包)&#xff0c;避免版本冲突问题   当使用maven进行项目依赖…

太炸了!Sora深夜发布!网友:我要失业了

2022年末&#xff0c;OpenAI聊天机器人ChatGPT的面世无疑成为了引领人工智能浪潮的标志性事件&#xff0c;宣告了新一轮科技革命的到来。无论是聊天娱乐、教育学习&#xff0c;还是工作生产、医疗健康等领域&#xff0c;人工智能正以前所未有的速度渗透到我们生活的方方面面。 …

[NSSRound#16 Basic]Web

1.RCE但是没有完全RCE 显示md5强比较&#xff0c;然后md5_3随便传 md5_1M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&md5_2M%C9h%FF%0E%E3%5C%20%95r%D4w…

【FPGA开发】HDMI通信协议解析及FPGA实现

本篇文章包含的内容 一、HDMI简介1.1 HDMI引脚解析1.2 HDMI工作原理1.3 DVI编码1.4 TMDS编码 二、并串转换、单端差分转换原语2.1 原语简介2.2 原语&#xff1a;IO端口组件2.3 IOB 输入输出缓冲区2.4 并转串原语OSERDESE2 笔者在这里使用的开发板是正点原子的达芬奇开发板&…

【HarmonyOS】hdc 环境变量设置

hdc&#xff08;HarmonyOS Device Connector&#xff09;是 HarmonyOS 为开发人员提供的用于调试的命令行工具&#xff0c;通过该工具可以在 windows/linux/mac 系统上与真实设备或者模拟器进行交互。 hdc 工具通过 HarmonyOS SDK 获取&#xff0c;存放于 /Huawei/Sdk/openhar…

简单DP算法(动态规划)

简单DP算法 算法思想例题1、01背包问题题目信息思路题解 2、摘花生题目信息思路题解 3、最长上升子序列题目信息思路题解 题目练习1、地宫取宝题目信息思路题解 2、波动数列题目信息思路题解 算法思想 从集合角度来分析DP问题 例如求最值、求个数 例题 1、01背包问题 题目…

基于requests框架实现接口自动化测试项目实战

requests库是一个常用的用于http请求的模块&#xff0c;它使用python语言编写&#xff0c;在当下python系列的接口自动化中应用广泛&#xff0c;本文将带领大家深入学习这个库&#xff0c;Python环境的安装就不在这里赘述了&#xff0c;我们直接开干。 01、requests的安装 wi…

创新技巧|迁移到 Google Analytics 4 时如何保存历史 Universal Analytics 数据

Google Universal Analytics 从 2023 年 7 月起停止收集数据&#xff08;除了付费 GA360 之外&#xff09;。它被Google Analytics 4取代。为此&#xff0c;不少用户疑惑&#xff1a;是否可以将累积&#xff08;历史&#xff09;数据从 Google Analytics Universal 传输到 Goog…

智能传感器阅读笔记-智能传感器的发展历程、发展趋势及方向

智能传感器的发展历程 第一代智能传感器 第一代智能传感器是数字式传感器&#xff0c;指改造A/D转换模块&#xff0c;并采用数字技术进行信号处理&#xff0c;使输出信号为数字信号&#xff08;或数字编码&#xff09;的传感器&#xff0c;主要由放大器、A/D转换模块、微处理…

清华AutoGPT:掀起AI新浪潮,与GPT4.0一较高下

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域迎来了一个又一个突破。最近&#xff0c;清华大学研发的AutoGPT成为了业界的焦点。这款AI模型以其出色的性能&#xff0c;展现了中国在AI领域的强大实力。 目录 引言&…

BulingBuling - 《工作中的焦虑》 [ Anxiety at Work ]

工作中的焦虑 帮助团队建立复原力、处理不确定性和完成任务的8项策略 作者&#xff1a;阿德里安-戈斯蒂克、切斯特-埃尔顿和安东尼-戈斯蒂克 Anxiety at Work 8 Strategies to Help Teams Build Resilience, Handle Uncertainty, and Get Stuff Done By Adrian Gostick and…

【VTKExamples::PolyData】第三十二期 MergeSelections

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例MergeSelections,并解析接口vtkSelection & vtkExtractSelection ,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U…