一、创建Qt gui应用对应的源码:

点击(此处)折叠或打开

  1. //mylineedit.h
  2. #ifndef MYLINEEDIT_H
  3. #define MYLINEEDIT_H
  4. #include <QWidget>
  5. #include <QLineEdit>
  6. class MyLineEdit : public QLineEdit
  7. {
  8. public:
  9. explicit MyLineEdit(QWidget *parent = 0);
  10. protected:
  11. void keyPressEvent(QKeyEvent *event);
  12. };
  13. #endif // MYLINEEDIT_H
  14. //mylineedit.cpp
  15. #include "mylineedit.h"
  16. #include <QLineEdit>
  17. #include <QDebug>
  18. #include <QKeyEvent>
  19. MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
  20. {
  21. }
  22. void MyLineEdit::keyPressEvent(QKeyEvent *event)
  23. {
  24. qDebug() << QObject::tr("MyLineEdit键盘按下事件");
  25. }

此时只会出现“MyLineEidt键盘按下事件”。

二、第二次修改

在mylineedit.cpp中keyPressEvent()添加

  1. event->ignore(); //忽略该事件

结果:多出现了"Widget键盘按下事件",并且lineedit无法输入了。

三、第三次修改

在mylineedit.h中添加public函数:

  1. bool event(QEvent *event);

然后定义:

  1. bool MyLineEdit::event(QEvent *event)
  2. {
  3. if(event->type() == QEvent::KeyPress)
  4. qDebug()<<QObject::tr("MylineEdit的event()函数");
  5. return QLineEdit::event(event);
  6. }

四、第四次修改

widget.h中public申明:

  1. bool eventFilter(QObject *obj,QEvent *event);

widget.cpp构造函数增加代码,并增加事件过滤器函数的定义:

  1. lineEdit->installEventFilter(this); //在widget上为lineEdit安装事件过滤器
  2. bool Widget::eventFilter(QObject *watched, QEvent *event)
  3. {
  4. if(watched==lineEdit) {
  5. if(event->type()==QEvent::KeyPress)
  6. qDebug()<<QObject::tr("Widget的事件过滤器");
  7. }
  8. return QWidget::eventFilter(watched, event);
  9. }


五、最后的源码:
mylineedit:

  1. //mylineedit.h
  2. #ifndef MYLINEEDIT_H
  3. #define MYLINEEDIT_H
  4. #include <QWidget>
  5. #include <QLineEdit>
  6. class MyLineEdit : public QLineEdit
  7. {
  8. public:
  9. explicit MyLineEdit(QWidget *parent = 0);
  10. bool event(QEvent *event);
  11. protected:
  12. void keyPressEvent(QKeyEvent *event);
  13. };
  14. #endif // MYLINEEDIT_H
  15. //mylineedit.cpp
  16. #include "mylineedit.h"
  17. #include <QLineEdit>
  18. #include <QDebug>
  19. #include <QKeyEvent>
  20. MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
  21. {
  22. }
  23. bool MyLineEdit::event(QEvent *event)
  24. {
  25. if(event->type() == QEvent::KeyPress)
  26. qDebug()<<QObject::tr("MylineEdit的event()函数");
  27. return QLineEdit::event(event);
  28. }
  29. void MyLineEdit::keyPressEvent(QKeyEvent *event)
  30. {
  31. qDebug() << QObject::tr("MyLineEdit键盘按下事件");
  32. QLineEdit::keyPressEvent(event);
  33. event->ignore();
  34. }

midget:

  1. //wdiget.h
  2. #ifndef WIDGET_H
  3. #define WIDGET_H
  4. #include <QWidget>
  5. class MyLineEdit;
  6. namespace Ui {
  7. class Widget;
  8. }
  9. class Widget : public QWidget
  10. {
  11. Q_OBJECT
  12. public:
  13. explicit Widget(QWidget *parent = 0);
  14. ~Widget();
  15. bool eventFilter(QObject *watched, QEvent *event);
  16. protected:
  17. void keyPressEvent(QKeyEvent *event);
  18. private:
  19. Ui::Widget *ui;
  20. MyLineEdit *lineEdit;
  21. };
  22. #endif // WIDGET_H
  23. //widget.cpp
  24. #include "widget.h"
  25. #include "ui_widget.h"
  26. #include "mylineedit.h"
  27. #include <QKeyEvent>
  28. #include <QDebug>
  29. Widget::Widget(QWidget *parent) :
  30. QWidget(parent),
  31. ui(new Ui::Widget)
  32. {
  33. lineEdit = new MyLineEdit(this);
  34. lineEdit->move(100, 100);
  35. lineEdit->installEventFilter(this); //在widget上为lineEdit安装事件过滤器
  36. ui->setupUi(this);
  37. }
  38. Widget::~Widget()
  39. {
  40. delete ui;
  41. }
  42. bool Widget::eventFilter(QObject *watched, QEvent *event)
  43. {
  44. if(watched==lineEdit) {
  45. if(event->type()==QEvent::KeyPress)
  46. qDebug()<<QObject::tr("Widget的事件过滤器");
  47. }
  48. return QWidget::eventFilter(watched, event);
  49. }
  50. void Widget::keyPressEvent(QKeyEvent *event)
  51. {
  52. qDebug()<<QObject::tr("Widget键盘按下事件");
  53. }

Qt事件学习的更多相关文章

  1. PyQt(Python+Qt)学习随笔:使用实例方法赋值方式捕获事件

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<第15.17节 PyQt(Python+ ...

  2. 第15.17节 PyQt(Python+Qt)入门学习:PyQt图形界面应用程序的事件捕获方法大全及对比分析

    老猿Python博文目录 老猿Python博客地址 按照老猿规划的章节安排,信号和槽之后应该介绍事件,但事件在前面的随笔<PyQt(Python+Qt)实现的GUI图形界面应用程序的事件捕获方法 ...

  3. PyQt学习随笔:Qt事件类QEvent详解

    QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通 ...

  4. PyQt学习随笔:自定义Qt事件可以使用的事件类型的常量值范围

    除了<PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料速查>介绍的Qt已经定义的事件外,Qt还支持自定义事件. 为了方便起见,可以使用 registerEventTyp ...

  5. PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料汇总详细内容速查

    下表是Qt5.11提供的所有已经定义的事件类型常量及其含义说明(其中标蓝色的是老猿认为价值比较大的事件),事件的事件类型通过QEvent.type()来获取.由于老猿没有找到直接粘贴Excel表格的方 ...

  6. QT事件

    qtevents多线程工作object存储 Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不错的文章,是2004年季刊的一篇文章,网上有这篇文 ...

  7. Qt入门学习——Qt 5 帮助文档的使用

    Qt入门学习——Qt 5 帮助文档的使用 学习图形界面开发,肯定离不开帮助文档的使用,因为它不像 C 语言那样就那么几个函数接口,图形接口的接口可以用海量来形容,常用的我们可能能记住,其它的真的没有必 ...

  8. qt事件传递过程和处理

    处理监控系统的时候遇到问题,在MainWidget中创建多个子Widget的时候,原意是想鼠标点击先让MainWidget截获处理后再分派给子Widget去处理,但调试后发现如果子Widget重新实现 ...

  9. QT入门学习笔记2:QT例程

    转至:http://blog.51cto.com/9291927/2138876 Qt开发学习教程 一.Qt开发基础学习教程 本部分博客主要根据狄泰学院唐老师的<QT实验分析教程>创作,同 ...

随机推荐

  1. getJSON方式请求服务器

    register.jsp <%@ page language="java" import="java.util.*" pageEncoding=" ...

  2. Codeforces 814C - An impassioned circulation of affection

    原题链接:http://codeforces.com/contest/814/problem/C 题意:有长度为n的一个字符串,q个询问,每个询问由数字m和字符c组成,问最多在字符串中替换m个字符,使 ...

  3. [HDU2604]Queuing

    题目:Queuing 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 分析: 1)将当前格和上一格合并当作一个状态,考虑下一个格子放0(m)还是1( ...

  4. arcgis api for javascipt 加载天地图、百度地图

    写在前面的话: 1.百度地图是自己定义的坐标系统,wkid=102100.百度地图数据是加密的产物.下文将附上百度坐标与WGS84,谷歌等坐标系统转换方法(地理-地理),此方法并未亲测,据说准 2.百 ...

  5. JSON的android应用实例

    JSON的android应用实例 Json在线解析器 下面是直接通过JUnit来测试直接通过API来解析Json数据 1.普通键值对象 2.Json数组对象 3.Json数组对象

  6. JS-iframe高度自适应内容

    iframe:https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/iframe iframe 内容加载后不改变 使用:onload=&q ...

  7. android SlidingDrawer

    SlidingDrawer把内容从屏幕上隐藏,允许用户拖动把手将内容显示到屏幕.SlidingDrawer可用于垂直或水平.它由两个视图组成的:handle,让用户拖拉的;content,连在hand ...

  8. drf:restful概念,类继承关系,drf请求封装,drf请求流程,版本控制组件,认证组件(token),权限组件

    1.restful规范 resfful规范的概念最重要: 是一套规范,规则,用于程序之间进行数据交换的约定. 他规定了一些协议,对我们感受最直接的就是,以前写增删改查的时候需要些四个视图寒素,rest ...

  9. 嵌入式C语言3.2 关键字---自定义数据类型

    1. struct 结构体 基本语法 struct myabc{ unsigned int a; unsigned int b; unsigned int c; unsigned int d; } 调 ...

  10. Java集合的介绍

    参考博客: https://blog.csdn.net/zhangqunshuai/article/details/80660974 List , Set, Map都是接口,前两个继承至Collect ...