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

news2024/11/27 7:34:58

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.coloradmin.cn/o/1450903.html

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

相关文章

小米米家智能摄像头mp4多碎片手工恢复案例

小米米家智能摄像头mp4多碎片手工恢复案例 智能摄像头品牌中小米算是绝对的大厂&#xff0c;其采用的方案也是比较成熟比较典型的&#xff1a;日志截图1分钟1个文件。小米米家的智能摄像头之前处理过很多&#xff0c;这次来讲一个比较特殊的案例。 故障存储: 32G TF卡 fat…

HiveSQL——统计当前时间段的有客人在住的房间数量

注&#xff1a;参考文章&#xff1a; HiveSQL一天一个小技巧&#xff1a;如何统计当前时间点状态情况【辅助变量累计变换思路】_sql查询统计某状态出现的次数及累计时间-CSDN博客文章浏览阅读2k次&#xff0c;点赞6次&#xff0c;收藏8次。本文总结了一种当前时间点状态统计的…

Vue 进阶系列丨实现简易VueRouter

‍‍Vue 进阶系列教程将在本号持续发布&#xff0c;一起查漏补缺学个痛快&#xff01;若您有遇到其它相关问题&#xff0c;非常欢迎在评论中留言讨论&#xff0c;达到帮助更多人的目的。若感本文对您有所帮助请点个赞吧&#xff01; 2013年7月28日&#xff0c;尤雨溪第一次在 G…

springboot集成elk实现日志采集可视化

一、安装ELK 安装ELK组件请参考我这篇博客&#xff1a;windows下安装ELK(踩坑记录)_windows上安装elk教程-CSDN博客 这里不再重复赘述。 二、编写logstash配置 ELK组件均安装好并成功启动&#xff0c;进入到logstash组件下的config文件夹&#xff0c;创建logstash.conf配置…

Three.JS教程5 threejs中的材质

Three.JS教程5 threejs中的材质 一、什么是Three.js材质&#xff1f;二、Three.js的材质类型1. 材质类型2. 材质的共用属性&#xff08;1&#xff09;.alphaHash : Boolean&#xff08;2&#xff09;.alphaTest : Float&#xff08;3&#xff09;.alphaToCoverage : Boolean&am…

使用 Mermaid 创建流程图,序列图,甘特图

使用 Mermaid 创建流程图和图表 Mermaid 是一个流行的 JavaScript 库&#xff0c;用于创建流程图、序列图、甘特图和其他各种图表。它的简洁语法使得创建图表变得非常简单&#xff0c;无需复杂的绘图工具或专业的编程技能。在本文中&#xff0c;我们将讲解如何使用 Mermaid 来创…

卷积神经网络的基本结构

卷积神经网络的基本结构 与传统的全连接神经网络一样&#xff0c;卷积神经网络依然是一个层级网络&#xff0c;只不过层的功能和形式发生了变化。 典型的CNN结构包括&#xff1a; 数据输入层&#xff08;Input Layer&#xff09;卷积层&#xff08;Convolutional Layer&#x…

Android 9.0 禁用adb shell input输入功能

1.前言 在9.0的系统rom产品开发中,在进行一些定制开发中,对于一些adb shell功能需要通过属性来控制禁止使用input 等输入功能,比如adb shell input keyevent 响应输入事件等,所以就需要 熟悉adb shell input的输入事件流程,然后来禁用adb shell input的输入事件功能,接…

函数求导法则【高数笔记】

【分类】 1. 四则运算求导 2. 复合运算求导 3. 整体思想求导 #整体思想求导本质是运用复合运算求导&#xff0c;只不过是对复合运算求导的一种精炼 #无论是具体函数还是抽象函数求导&#xff0c;方法是一致的 【四则运算求导】 加&#xff0c;减&#xff0c;乘&#xff0c;除&a…

openEuler 22.03 LTS 上源码安装 PostgreSQL 15

安装PostgreSQL 15 1 安装必要的依赖 #yum install -y readline-devel zlib-devel gcc2、下载源码 # wget https://ftp.postgresql.org/pub/source/v15.6/postgresql-15.6.tar.gz # tar -xzvf postgresql-15.6.tar.gz3 配置 # cd postgresql-15.6/ # ./configure4 编译安装…

JVM-JVM中对象的结构

对象内存布局 对象里的三个区&#xff1a; 对象头&#xff08;Header&#xff09;&#xff1a;Java对象头占8byte。如果是数组则占12byte。因为JVM里数组size需要使用4byte存储。 标记字段MarkWord&#xff1a; 用于存储对象自身的运行时数据&#xff0c;它是synchronized实现轻…

图像识别基础之模板匹配

principle 图像匹配 本质&#xff1a;图像的相似度很高(矩阵的相似度很高) code /*\brief 我的图像匹配函数&#xff0c;获取差方和均值最小的矩阵作为结果\param srcPicFile:用以匹配的图像文件\param templatePicFile:模板图像文件\param destPicFile:输出的检测结果文件…

【读书笔记】ICS设备及应用攻击(一)

工控系统通常是由互联设备所构成的大型复杂系统&#xff0c;这些设备包括类似于人机界面&#xff08;HMI&#xff09;、PLC、传感器、执行器以及其他使用协商好的协议进行相互通信的设备。所有交互背后的驱动力都是软件&#xff0c;软件为工控系统中几乎所有部分的运行提供支撑…

鸿蒙开发-HarmonyOS UI架构

初步布局Index 当我们新建一个工程之后&#xff0c;首先会进入Index页。我们先简单的做一个文章列表的显示 class Article {title?: stringdesc?: stringlink?: string }Entry Component struct Index {State articles: Article[] []build() {Row() {Scroll() {Column() …

Python是垃圾?千万不要再学Python了?

“人生苦短&#xff0c;快学Python”这句话&#xff0c;相信大家都有看到过&#xff0c;但是有细心留意过&#xff0c;就会发现Python其实在网上的评价褒贬不一&#xff0c;有好评&#xff0c;也有差评。这就会给那些不懂Python却想要学Python的一些人造成困惑&#xff0c;我到…

主从延迟如何解决

最近项目上线&#xff0c;遇到了主从问题。按理说公司基建不至于出现这种问题&#xff0c;但就是出现了。可能因为用的不是原生的MySQL吧。主从延迟会给前端和服务端带来很多问题&#xff0c;需要花费时间用工程手段来解决&#xff0c;我认为这是很不合理的。 举几个因为主从延…

数字IC实践项目(9)— Tang Nano 20K: I2C OLED Driver

Tang Nano 20K: I2C OLED Driver 写在前面的话硬件模块RTL电路和相关资源报告SSD1306 OLED 驱动芯片SSD1306 I2C协议接口OLED 驱动模块RTL综合实现 总结 写在前面的话 之前在逛淘宝的时候偶然发现了Tang Nano 20K&#xff0c;十分感慨国产FPGA替代方案的进步之快&#xff1b;被…

51单片机项目(30)——基于51单片机的心率血氧脉搏检测的proteus仿真

1.功能设计 可以测量脉搏、心率、血氧浓度、体温&#xff0c;并且实时显示在LCD1602屏幕上&#xff0c;&#xff08;第一行是体温血氧&#xff0c;第二行是心率脉搏&#xff09;。 &#xff08;需要完整源文件的&#xff0c;直接看最后一节&#xff09; 另外&#xff0c;还…

PXE实现自动批量安装部署操作系统

目录 一、PXE介绍 二、PXE涉及的相关知识点 三、搭建PXE网络体系的前提 四、服务端要安装一系列的依赖环境 五、搭建 PXE 远程安装服务器 5.1、安装并启动TFTP服务 5.2、安装并启用 DHCP 服务 5.3、准备 Linux 内核、初始化镜像文件、准备 PXE 引导程序 5.4、安装FTP服…

【C++第二阶段】赋值运算符重载

你好你好&#xff01; 以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 赋值运算符重载 赋值运算符重载 实验①&#xff0c;还没有对析构运算符重载时 #include<iostream> #include<string> using namespace std;clas…