Qt事件学习
一、创建Qt gui应用对应的源码:
点击(此处)折叠或打开
- //mylineedit.h
- #ifndef MYLINEEDIT_H
- #define MYLINEEDIT_H
- #include <QWidget>
- #include <QLineEdit>
- class MyLineEdit : public QLineEdit
- {
- public:
- explicit MyLineEdit(QWidget *parent = 0);
- protected:
- void keyPressEvent(QKeyEvent *event);
- };
- #endif // MYLINEEDIT_H
- //mylineedit.cpp
- #include "mylineedit.h"
- #include <QLineEdit>
- #include <QDebug>
- #include <QKeyEvent>
- MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
- {
- }
- void MyLineEdit::keyPressEvent(QKeyEvent *event)
- {
- qDebug() << QObject::tr("MyLineEdit键盘按下事件");
- }
此时只会出现“MyLineEidt键盘按下事件”。
二、第二次修改
在mylineedit.cpp中keyPressEvent()添加
- event->ignore(); //忽略该事件
结果:多出现了"Widget键盘按下事件",并且lineedit无法输入了。
三、第三次修改
在mylineedit.h中添加public函数:
- bool event(QEvent *event);
然后定义:
- bool MyLineEdit::event(QEvent *event)
- {
- if(event->type() == QEvent::KeyPress)
- qDebug()<<QObject::tr("MylineEdit的event()函数");
- return QLineEdit::event(event);
- }
四、第四次修改
widget.h中public申明:
- bool eventFilter(QObject *obj,QEvent *event);
widget.cpp构造函数增加代码,并增加事件过滤器函数的定义:
- lineEdit->installEventFilter(this); //在widget上为lineEdit安装事件过滤器
- bool Widget::eventFilter(QObject *watched, QEvent *event)
- {
- if(watched==lineEdit) {
- if(event->type()==QEvent::KeyPress)
- qDebug()<<QObject::tr("Widget的事件过滤器");
- }
- return QWidget::eventFilter(watched, event);
- }

五、最后的源码:
mylineedit:
- //mylineedit.h
- #ifndef MYLINEEDIT_H
- #define MYLINEEDIT_H
- #include <QWidget>
- #include <QLineEdit>
- class MyLineEdit : public QLineEdit
- {
- public:
- explicit MyLineEdit(QWidget *parent = 0);
- bool event(QEvent *event);
- protected:
- void keyPressEvent(QKeyEvent *event);
- };
- #endif // MYLINEEDIT_H
- //mylineedit.cpp
- #include "mylineedit.h"
- #include <QLineEdit>
- #include <QDebug>
- #include <QKeyEvent>
- MyLineEdit::MyLineEdit(QWidget *parent):QLineEdit(parent)
- {
- }
- bool MyLineEdit::event(QEvent *event)
- {
- if(event->type() == QEvent::KeyPress)
- qDebug()<<QObject::tr("MylineEdit的event()函数");
- return QLineEdit::event(event);
- }
- void MyLineEdit::keyPressEvent(QKeyEvent *event)
- {
- qDebug() << QObject::tr("MyLineEdit键盘按下事件");
- QLineEdit::keyPressEvent(event);
- event->ignore();
- }
midget:
- //wdiget.h
- #ifndef WIDGET_H
- #define WIDGET_H
- #include <QWidget>
- class MyLineEdit;
- namespace Ui {
- class Widget;
- }
- class Widget : public QWidget
- {
- Q_OBJECT
- public:
- explicit Widget(QWidget *parent = 0);
- ~Widget();
- bool eventFilter(QObject *watched, QEvent *event);
- protected:
- void keyPressEvent(QKeyEvent *event);
- private:
- Ui::Widget *ui;
- MyLineEdit *lineEdit;
- };
- #endif // WIDGET_H
- //widget.cpp
- #include "widget.h"
- #include "ui_widget.h"
- #include "mylineedit.h"
- #include <QKeyEvent>
- #include <QDebug>
- Widget::Widget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::Widget)
- {
- lineEdit = new MyLineEdit(this);
- lineEdit->move(100, 100);
- lineEdit->installEventFilter(this); //在widget上为lineEdit安装事件过滤器
- ui->setupUi(this);
- }
- Widget::~Widget()
- {
- delete ui;
- }
- bool Widget::eventFilter(QObject *watched, QEvent *event)
- {
- if(watched==lineEdit) {
- if(event->type()==QEvent::KeyPress)
- qDebug()<<QObject::tr("Widget的事件过滤器");
- }
- return QWidget::eventFilter(watched, event);
- }
- void Widget::keyPressEvent(QKeyEvent *event)
- {
- qDebug()<<QObject::tr("Widget键盘按下事件");
- }
Qt事件学习的更多相关文章
- PyQt(Python+Qt)学习随笔:使用实例方法赋值方式捕获事件
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 在<第15.17节 PyQt(Python+ ...
- 第15.17节 PyQt(Python+Qt)入门学习:PyQt图形界面应用程序的事件捕获方法大全及对比分析
老猿Python博文目录 老猿Python博客地址 按照老猿规划的章节安排,信号和槽之后应该介绍事件,但事件在前面的随笔<PyQt(Python+Qt)实现的GUI图形界面应用程序的事件捕获方法 ...
- PyQt学习随笔:Qt事件类QEvent详解
QEvent类是PyQt5.QtCore中定义的事件处理的基类,事件对象包含了事件对应的参数. <Python & PyQt学习随笔:PyQt主程序的基本框架>介绍了PyQt程序通 ...
- PyQt学习随笔:自定义Qt事件可以使用的事件类型的常量值范围
除了<PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料速查>介绍的Qt已经定义的事件外,Qt还支持自定义事件. 为了方便起见,可以使用 registerEventTyp ...
- PyQt学习随笔:Qt事件QEvent.type类型常量及其含义资料汇总详细内容速查
下表是Qt5.11提供的所有已经定义的事件类型常量及其含义说明(其中标蓝色的是老猿认为价值比较大的事件),事件的事件类型通过QEvent.type()来获取.由于老猿没有找到直接粘贴Excel表格的方 ...
- QT事件
qtevents多线程工作object存储 Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不错的文章,是2004年季刊的一篇文章,网上有这篇文 ...
- Qt入门学习——Qt 5 帮助文档的使用
Qt入门学习——Qt 5 帮助文档的使用 学习图形界面开发,肯定离不开帮助文档的使用,因为它不像 C 语言那样就那么几个函数接口,图形接口的接口可以用海量来形容,常用的我们可能能记住,其它的真的没有必 ...
- qt事件传递过程和处理
处理监控系统的时候遇到问题,在MainWidget中创建多个子Widget的时候,原意是想鼠标点击先让MainWidget截获处理后再分派给子Widget去处理,但调试后发现如果子Widget重新实现 ...
- QT入门学习笔记2:QT例程
转至:http://blog.51cto.com/9291927/2138876 Qt开发学习教程 一.Qt开发基础学习教程 本部分博客主要根据狄泰学院唐老师的<QT实验分析教程>创作,同 ...
随机推荐
- php ltrim()函数 语法
php ltrim()函数 语法 ltrim()函数怎么用? php ltrim()函数用于删除字符串左边的空格或其他预定义字符,语法是ltrim(string,charlist),返回经过charl ...
- B-Tree, B+Tree, B*树介绍
[数据结构]B-Tree, B+Tree, B*树介绍 转 [数据结构]B-Tree, B+Tree, B*树介绍 [摘要] 最近在看Mysql的存储引擎中索引的优化,神马是索引,支持啥索引.全是 ...
- xshell链接linux出现SSH服务器拒绝了密码 的解决方案
参考文章:https://blog.csdn.net/weixin_38554662/article/details/80589852 但是需要注意的是,ssh_config文件本来是没有权限修改的, ...
- Windows Filesystem filter driver
参考:http://www.codeproject.com/Articles/43586/File-System-Filter-Driver-Tutorial 关键点: To perform atta ...
- Windows重置网络命令
我们在日常使用电脑的时候会碰到网络异常,网络故障,想要针对性地去解决是很困难的. 有时候可能查遍了资料,花了大量时间,怎么搞都还是搞不定.所以,这次直接给大家分享一个通过重置网络来解决所有问题的方法. ...
- 爬取拉勾网python工程师的岗位信息并生成csv文件
转载自:https://www.cnblogs.com/sui776265233/p/11146969.html 代码写得很好,但是目前只看得懂前一部分 一.爬取和分析相关依赖包 Python版本: ...
- bitset归结,一个实例
我是蒟蒻一名,请大佬勿喷. 绝大部分来自https://www.cnblogs.com/magisk/p/8809922.html , 可以去大佬博客逛一逛 bitset是C++中类似数组的一种 ...
- webpack打包配置中出现的问题
第一个错误: One CLI for webpack must be installed. These are recommended choices, delivered as separate p ...
- CTU Open 2018 Lighting /// 组合数递推 二进制
题目大意: 给定n k 给定一个数的二进制位a[] 求这个数加上 另一个二进制位<=n的数b 后 能得到多少个不同的 二进制位有k个1 的数 样例 input10 51000100111 out ...
- java虚拟机规范(se8)——class文件格式(一)
第四章 class文件格式 本章介绍了java虚拟机的class文件格式.每一个class文件包含一个单独的类或者接口的定义.虽然类和接口不一定都定义在文件中(比如类和接口亦可以通过类加载器直接生成) ...