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

Qt中事件的传递过程

事件的传递过程

一. 事件的传递过程

  1. 事件被组件对象处理后可能传递到其父组件对象
    请添加图片描述

二. QEvent中的关键成员函数

  1. 帮助手册中的描述
    请添加图片描述
  2. 函数的功能
ignore():忽略当前事件,可能会传递给父组件
accept():接收者处理当前事件
isAccepted():判断当前事件是否被处理

三. 实验

  1. 实验

    #ifndef MYLINEEDIT_H
    #define MYLINEEDIT_H
    
    #include <QLineEdit>
    
    class MyLineEdit : public QLineEdit
    {
        Q_OBJECT
    public:
        explicit MyLineEdit(QWidget *parent = 0);
        bool event(QEvent* e);
        void keyPressEvent(QKeyEvent* e);
    signals:
    
    public slots:
    
    };
    #endif // MYLINEEDIT_H
    
    
    #include "MyLineEdit.h"
    #include <QDebug>
    #include <QEvent>
    #include <QDebug>
    #include <QEvent>
    #include <QKeyEvent>
    MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
    {
    }
    
    //重写event处理函数
    bool MyLineEdit::event(QEvent* e)
    {
        //如果是按键事件,则打印
        if( e->type() == QEvent::KeyPress )
        {
            qDebug() << "MyLineEdit::event";
        }
    
        return QLineEdit::event(e); //调用父类的处理函数
    }
    
    void MyLineEdit::keyPressEvent(QKeyEvent* e)
    {
        qDebug() << "MyLineEdit::keyPressEvent";
    
        QLineEdit::keyPressEvent(e);
    
        // e->ignore();
    }
    
    
    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QLineEdit>
    #include "MyLineEdit.h"
    
    #include <QWidget>
    #include "MyLineEdit.h"
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
        MyLineEdit myLineEdit;
    public:
        Widget(QWidget* parent = 0);
        bool event(QEvent* e);
        void keyPressEvent(QKeyEvent* e);
        ~Widget();
    };
    
    #endif
    
    
    #include "widget.h"
    #include "ui_widget.h"
    #include <QDebug>
    #include <QEvent>
    #include <QDebug>
    #include <QEvent>
    #include <QKeyEvent>
    
    Widget::Widget(QWidget *parent)
        : QWidget(parent), myLineEdit(this)
    {
    
    }
    
    bool Widget::event(QEvent* e)
    {
        if( e->type() == QEvent::KeyPress )
        {
            qDebug() << "Widget::event";
        }
    
        return QWidget::event(e);
    }
    
    void Widget::keyPressEvent(QKeyEvent* e)
    {
        qDebug() << "Widget::keyPressEvent";
    
        QWidget::keyPressEvent(e);
    }
    
    Widget::~Widget()
    {
    
    }
    
    
    #include "widget.h"
    
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        Widget w;
        w.show();
        return a.exec();
    }
    
    

相关文章:

  • Qt事件初探-发现事件
  • Qt中TCP通信的实现
  • ubuntu下MQTT的移植安装
  • MQTT协议 发布/订阅 机制初探 - (模拟物联网传感器设备和控制模块间的通信)
  • MQTT初探
  • VScode快捷键
  • Linux C的MQTT测试代码编写 - 跨主机的MQTT客户端通信
  • Linux系统嵌入式设备的串口通信
  • Anaconda在Windows的安装
  • notebook修改默认打开的路径
  • Python实现MQTT客户端的基本功能
  • 初探C++标准库
  • 命名空间(名字空间)
  • C++的字符串类
  • C++中的引用
  • 《Java编程思想》读书笔记-对象导论
  • avalon2.2的VM生成过程
  • ES2017异步函数现已正式可用
  • JavaWeb(学习笔记二)
  • js如何打印object对象
  • ng6--错误信息小结(持续更新)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • windows-nginx-https-本地配置
  • 翻译:Hystrix - How To Use
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 缓存与缓冲
  • 机器学习中为什么要做归一化normalization
  • 基于 Babel 的 npm 包最小化设置
  • 记录:CentOS7.2配置LNMP环境记录
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 前端工程化(Gulp、Webpack)-webpack
  • 如何进阶一名有竞争力的程序员?
  • 试着探索高并发下的系统架构面貌
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 网页视频流m3u8/ts视频下载
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 小而合理的前端理论:rscss和rsjs
  • 译米田引理
  • 自定义函数
  • 【干货分享】dos命令大全
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • $.each()与$(selector).each()
  • (2)Java 简介
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (排序详解之 堆排序)
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)c++ std::pair 与 std::make
  • (转)setTimeout 和 setInterval 的区别
  • (转载)Linux网络编程入门
  • **PHP二维数组遍历时同时赋值
  • .CSS-hover 的解释