当前位置: 首页 > news >正文

Qt事件初探-发现事件

Qt事件初探-发现事件

一. Qt中的消息处理机制

  1. 用户、操作系统和GUI应用程序
    用户操作硬件,操作系统检测到硬件的动作产生了系统消息,把这些系统消息传递给我们的GUI应用程序,在GUI应用程序内QApplication 会把这些系统消息抽象成事件,传递给QObject组件,不同的QObject组件有自己的事件处理函数,比如,按钮类QPushButton会把按键按下这个事件转换成clicked()信号。
    请添加图片描述
  2. GUI应用程序内关键的类 QApplication 和 QObject
    请添加图片描述

二. 发现事件

  1. 实验设计:封装一个窗口类继承自QWidget,众所周知,QWidget是QObject的子类,所以支持Qt中的消息响应机制,可以处理事件产生信号,在自己封装的类中重写父类QWidget的事件处理函数,添加打印好观察现象。
  2. 类的封装
    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    #include <QEvent>
    
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        Widget(QWidget *parent = nullptr);
        ~Widget();
    
        bool event(QEvent *event);
        void keyReleaseEvent(QKeyEvent *event);
    
    };
    #endif // WIDGET_H
    
    
  3. 类的实现
    #include "Widget.h"
    #include <QDebug>
    Widget::Widget(QWidget *parent)
        : QWidget(parent)
    {
    
    }
    
    
    bool Widget::event(QEvent *event)
    {
        qDebug() << "Widget::event" << event->type();
    }
    
    void Widget::keyReleaseEvent(QKeyEvent *event)
    {
    
    }
    
    Widget::~Widget()
    {
    
    }
    
  4. 上现象
    请添加图片描述
  5. 现象分析:窗口弹出来后,发现表面风平浪静的窗口背后接收到了很多事件,移动鼠标、拖动窗口、按下键盘按键都会产生事件,这些事件都是QApplication传递过来的,不同的组件有自己的事件处理函数,QWidget默认是不对这些事件处理的所以没有任何现象,但是重写后对这些事件加打印了,我们通过打印发现了他们,嘻嘻~

相关文章:

  • Qt中TCP通信的实现
  • ubuntu下MQTT的移植安装
  • MQTT协议 发布/订阅 机制初探 - (模拟物联网传感器设备和控制模块间的通信)
  • MQTT初探
  • VScode快捷键
  • Linux C的MQTT测试代码编写 - 跨主机的MQTT客户端通信
  • Linux系统嵌入式设备的串口通信
  • Anaconda在Windows的安装
  • notebook修改默认打开的路径
  • Python实现MQTT客户端的基本功能
  • 初探C++标准库
  • 命名空间(名字空间)
  • C++的字符串类
  • C++中的引用
  • 函数的重载
  • 4个实用的微服务测试策略
  • AHK 中 = 和 == 等比较运算符的用法
  • Android Volley源码解析
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Flannel解读
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java方法详解
  • linux安装openssl、swoole等扩展的具体步骤
  • Mysql优化
  • Objective-C 中关联引用的概念
  • Puppeteer:浏览器控制器
  • Rancher-k8s加速安装文档
  • Spring声明式事务管理之一:五大属性分析
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前嗅ForeSpider教程:创建模板
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • mysql面试题分组并合并列
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​如何在iOS手机上查看应用日志
  • ​虚拟化系列介绍(十)
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • (9)目标检测_SSD的原理
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net FrameWork总结
  • .Net 垃圾回收机制原理(二)
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • []FET-430SIM508 研究日志 11.3.31
  • [20150321]索引空块的问题.txt
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [Android]使用Retrofit进行网络请求
  • [Angular] 笔记 18:Angular Router
  • [AutoSar NVM] 存储架构
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn