Qt事件处理机制1-事件过滤器

事件在到达某个具体的对象前,可以通过事件过滤器进行筛选处理,函数定义如下:

virtual bool eventFilter(QObject *watched, QEvent *event);

Qt帮助文档:
Filters events if this object has been installed as an event filter for the watched object. In your
reimplementation of this function, if you want to filter the event out, i.e. stop it being handled further, return true; otherwise return false.

大致意思:如果在eventFilter函数中返回true,表示拦截事件,不再执行watched对象的event函数;而返回false,则表示除了在eventFilter中进行相关操作后,仍旧希望执行watched对象的event函数;也可以在eventFilter函数中调用父类的eventFilter函数,交给父类来处理,父类仍旧遵循以上规则。

下面关于文档里说的返回值,进行演示说明
MyButton.h

#ifndef MYBUTTON_H
#define MYBUTTON_H#include <QPushButton>class MyButton : public QPushButton
{Q_OBJECT
public:MyButton(QWidget *parent = nullptr);~MyButton();protected:bool event(QEvent *e) override;
};#endif // MYBUTTON_H

MyButton.cpp

#include "MyButton.h"
#include <QDebug>
#include <QEvent>MyButton::MyButton(QWidget *parent) : QPushButton(parent){}MyButton::~MyButton(){}bool MyButton::event(QEvent *e)
{if (e->type() == QEvent::MouseButtonPress){qDebug() << __FUNCTION__ << event->isAccepted();}return QPushButton::event(e);
}

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();protected:bool eventFilter(QObject *watched, QEvent *event) override;private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

MainWindow.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);ui->pushButton->installEventFilter(this);
}MainWindow::~MainWindow()
{delete ui;
}bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{if (watched == ui->pushButton){if (event->type() == QEvent::MouseButtonPress){qDebug() << __FUNCTION__ << event->isAccepted();return false;// 注意这里的返回值,影响运行结果,文章最后会提到}}return QMainWindow::eventFilter(watched, event);
}

运行结果: eventFilter函数中return false时

MainWindow::eventFilter true
MyButton::event true

运行结果: eventFilter函数中return true时

MainWindow::eventFilter true

温馨提示:请注意程序中的event->isAccepted()打印出来的值,下一篇文章将会用到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809534.shtml

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

相关文章

记录kafka-flink-kafka的end-to-end的exactly-once语义

记录kafka-flink-kafka的end-to-end的exactly-once语义 步骤代码 步骤 开启checkpoint、stateBackend的设置和checkpoint配置设置kafka source的配置读取kafka source message随意的transformation&#xff1b;并打印结果kafka sink端的配置输出到kafka sink端执行 代码 pac…

为linux和windows系统备份还原点,防止系统出问题无法恢复

一、linux系统操作办法&#xff1a; sudo apt update sudo apt install timeshift timeshift --create 输出结果如下&#xff1a; 等待约5分钟就会创建成功&#xff1a; 这个备份功能只备份系统&#xff0c;不备份文件&#xff0c;但也不会删除文件。 工作站系统的保存位置&a…

Win10安装sqlplus遇到报错的解决办法

1.下载安装sqlplus.exe的错误解决过程 最近有用到sqlplus连接Oracle数据库执行自动化脚本&#xff0c;Orcle服务器版本是11.2.0.1。在Navicat工具上通过如下语句查询到的版本信息截图如图1所示&#xff1a; SELECT * FROM v$version; 图1 Oracle服务器版本信息 其中“Oracle Da…

Docker部署SpringBoot+Vue前后端分离项目

文章目录 1. 安装Docker1. 1 卸载旧版Docker1.2 配置yum仓库1.3 安装Docker1.4 添加自启动配置1.5 配置阿里云镜像加速1.6 测试 2. 安装Nginx2.1 拉取镜像2.2 安装Nginx2.3 测试 3. 安装MySQL3.1 拉取镜像3.2 安装MySQL3.3 连接MySQL 4. 部署SpringBoot项目4.1 Maven打包4.2 编…

深度学习Vue框架生命周期(三)

一.什么是生命周期&#xff1f; 在vue中&#xff0c;生命周期就是vue实例程序从创建到销毁的这个过程&#xff0c;在生命周期中&#xff0c;不同阶段我们可以做不同的事情。vue的生命周期是创建阶段、挂载阶段、更新阶段、销毁阶段 二.什么是钩子函数&#xff1f; 钩子函数就是…

常用网络状态码以及含义

以下是常见的网络状态码及其含义&#xff1a; 1xx&#xff08;信息类状态码&#xff09;&#xff1a; 100 Continue&#xff1a;继续。服务器已经收到客户端的部分请求&#xff0c;客户端可继续发送请求。101 Switching Protocols&#xff1a;切换协议。服务器正在根据客户端…

数据库数据恢复—Sql Server数据库文件丢失如何恢复数据?

服务器数据恢复环境&#xff1a; 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5&#xff0c;划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检&#xff1a; 由于未知原因&#xf…

Windows联网状态工具TCPView

文章目录 TCPView命令行工具更多Sysinternals Suite工具 TCPView TCPView用于显示系统上所有 TCP 和 UDP 终结点的详细列表&#xff0c;包括本地和远程地址以及 TCP 连接的状态&#xff0c;界面如下。 列表的表头含义如下 表头含义表头含义Process name应用名称Process id进程…

浅谈:从医疗元宇宙向更多实业领域的拓展

近年来&#xff0c;在各大媒体的持续曝光下&#xff0c;元宇宙这一新兴赛道受到全球资本市场的热烈追捧。更多的品牌方开始持续进军元宇宙领域营销&#xff0c;从限量 NFT 盲盒到多元游戏化场景&#xff0c;再到 VR 创意互动装置的出现&#xff0c;元宇宙市场正不断推陈出新&am…

最新Android Studio导入aar包的方法

以前的方式&#xff0c;目前看网上也大多数都是这种方式&#xff0c;导致我本地加的时候一直有问题 但是这样都无法sync以及编译通过&#xff0c;因为方式已经变了 1&#xff1a;将aar文件复制到MyApplication\app\libs下 2&#xff1a;在MyApplication\app\build.gradle下添加…

结构化面试-应急应变题

例题&#xff1a; 你是景区的工作人员&#xff0c;你在巡逻时听到游客在抱怨景区很大&#xff0c;找不到厕所&#xff0c;工作人员 态度也很恶劣&#xff0c;以后再也不来了&#xff0c;这时还有其他游客也在旁边附和&#xff0c;你怎么办&#xff1f; 回答&#xff1a;&…

oninput 和 onchange 事件的区别

oninput 和 onchange 是两个常用于处理表单元素&#xff08;如输入框、选择框等&#xff09;的 JavaScript 事件。它们的主要区别在于触发时机和触发频率。 oninput 事件 oninput 事件在用户输入内容时触发&#xff0c;这意味着每当用户在输入框中键入、删除或粘贴字符时&…

HTTP请求报文介绍

本章简要介绍渗透测试员在攻击Web应⽤程序时可能遇到的关键技术。 将分析HTTP协议、服务器和客⼾端常⽤的技术以及⽤于在各种情形下呈现数据的编码⽅案。 这些技术⼤都简单易懂&#xff0c;掌握其相关特性对于向Web应⽤程序发动有效攻击极其重要。 1.1 HTTP协议概述介绍 HTT…

VMvare进行靶场环境搭建,防火墙连接[物理主机,攻击机,靶机],主机与VM虚拟网卡拓扑形象,web连接防火墙报错

配置目标 两块虚拟网卡分别为vmnet1和vmnet8 vmnet1配置两个网段192.168.20.1/24和192.168.30.1/24 其中192.168.20.0网段将防火墙管理接口0/0/0&#xff0c;接口地址为192.168.20.100和物理机192.168.20.1/24进行连接 其中192.168.30.0网段将防火墙1/0/0接口&#xff0c;接…

智能AI写作,自动写文案效率高

随着科技的不断发展&#xff0c;人工智能领域的应用也日益广泛&#xff0c;其中智能AI写作作为一项新兴技术&#xff0c;正逐渐改变着传统文案写作的方式。智能AI写作是利用人工智能技术来生成文案内容&#xff0c;其高效率和高质量的特点吸引了越来越多的用户。在这个信息爆炸…

第十届蓝桥杯省赛真题(C/C++大学B组)

试题 A: 组队 答案&#xff1a;490 试题 B: 年号字串 #include <bits/stdc.h> using namespace std;int main() {//26进制数 int n;cin>>n;string s "111";for(int i s.length() - 1;i >0;i--){s[i] A - 1 n % 26;n / 26;}cout<<s<<…

如何发现高危的PoC和EXP?漏洞检测方法 示例,实战应急实战举例,包括:SQLi、XSS、SSTI/ELI、文件哈希、SSRF、命令执行/命令注入等等

如何发现高危的PoC和EXP?漏洞检测方法 & 示例,实战应急实战举例,包括:SQLi、XSS、SSTI/ELI、文件哈希、SSRF、命令执行/命令注入等等。 在网络安全领域,发现高危的PoC(Proof of Concept)和EXP(Exploit)对于防范和应对潜在的安全威胁至关重要。以下是关于如何发现高…

leetcode 1766

leetcode 1766 题目 例子 思路 将边的关系&#xff0c;转化为树结构。 记录val 对应的id 列表。 记录是否遍历过节点。 记录id 和对应的深度。 使用dfs&#xff0c; 从根开始遍历。 代码实现 class Solution { private:vector<vector<int>> gcds;//val : the …

AliyunCTF 2024 - BadApple

文章目录 前言环境搭建漏洞分析漏洞利用参考 前言 本文首发于看雪论坛 https://bbs.kanxue.com/thread-281291.htm 依稀记得那晚被阿里CTF支配的恐惧&#xff0c;今年的阿里CTF笔者就做了一道签到PWN题&#xff0c;当时也是下定决心要学习 jsc pwn 然后复现这道 BadApple 题目…

github克隆报错:failed: The TLS connection was non-properly terminated.

github克隆gazebo_ros_control报错 fatal: unable to access https://github.com/ros-controls/gazebo_ros_control.git/: gnutls_handshake() failed: The TLS connection was non-properly terminated. sudo apt-get install ros-noetic-gazebo-ros-control git 克隆gazeb…