qt自定义事件过滤器

以下是一个完整的示例,包括如何使用这个事件过滤器的步骤:

1. 定义事件过滤器类

你已经正确定义了 LostFocusFilter 类,这里是完整的定义:

#include <QObject>
#include <QEvent>class LostFocusFilter : public QObject
{Q_OBJECTpublic:explicit LostFocusFilter(QObject* parent = nullptr);protected:bool eventFilter(QObject* obj, QEvent* event) override;
};LostFocusFilter::LostFocusFilter(QObject* parent) : QObject(parent) {}bool LostFocusFilter::eventFilter(QObject* obj, QEvent* event)
{if (event->type() == QEvent::FocusOut)return true;return QObject::eventFilter(obj, event);
}

2. 将事件过滤器应用到对象

假设你有一个 QLineEdit 对象,并且你想要在它失去焦点时捕捉事件。你可以在你的主窗口或其他部分的代码中添加以下内容:

#include <QApplication>
#include <QMainWindow>
#include <QLineEdit>
#include "LostFocusFilter.h"int main(int argc, char *argv[])
{QApplication app(argc, argv);QMainWindow mainWindow;QLineEdit* lineEdit = new QLineEdit(&mainWindow);// 创建 LostFocusFilter 对象LostFocusFilter* focusFilter = new LostFocusFilter(lineEdit);// 将事件过滤器应用到 QLineEdit 对象lineEdit->installEventFilter(focusFilter);mainWindow.setCentralWidget(lineEdit);mainWindow.show();return app.exec();
}

3. 扩展事件处理

如果你想在失去焦点时执行特定操作,你可以扩展 eventFilter 方法。例如,打印一条消息或触发某个操作:

#include <QDebug>bool LostFocusFilter::eventFilter(QObject* obj, QEvent* event)
{if (event->type() == QEvent::FocusOut){qDebug() << "Widget lost focus!";// 在此处执行其他操作return true; // 拦截事件,不传递给被监控对象}return QObject::eventFilter(obj, event);
}

这样,当 QLineEdit 失去焦点时,控制台将输出 "Widget lost focus!"。

4. 注意事项

  • 事件的传播:如果你希望事件在处理后继续传播,可以返回 false 而不是 true
  • 过滤多个事件:你可以扩展 eventFilter 方法来处理更多类型的事件。

完整示例

综合以上内容,以下是一个完整的示例:

#include <QApplication>
#include <QMainWindow>
#include <QLineEdit>
#include <QDebug>
#include <QEvent>class LostFocusFilter : public QObject
{Q_OBJECTpublic:explicit LostFocusFilter(QObject* parent = nullptr) : QObject(parent) {}protected:bool eventFilter(QObject* obj, QEvent* event) override{if (event->type() == QEvent::FocusOut){qDebug() << "Widget lost focus!";return true; // 拦截事件,不传递给被监控对象}return QObject::eventFilter(obj, event);}
};int main(int argc, char *argv[])
{QApplication app(argc, argv);QMainWindow mainWindow;QLineEdit* lineEdit = new QLineEdit(&mainWindow);// 创建 LostFocusFilter 对象LostFocusFilter* focusFilter = new LostFocusFilter(lineEdit);// 将事件过滤器应用到 QLineEdit 对象lineEdit->installEventFilter(focusFilter);mainWindow.setCentralWidget(lineEdit);mainWindow.show();return app.exec();
}

这样,你就可以在 QLineEdit 失去焦点时捕捉到 QEvent::FocusOut 事件并执行相应的操作。

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

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

相关文章

自然语言处理:第三十二章HippoRAG:性能提高20% - 受海马体启发的RAG

文章链接: HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models 项目地址: OSU-NLP-Group/HippoRAG: HippoRAG is a novel RAG framework inspired by human long-term memory that enables LLMs to continuously integrate knowledge across e…

2024-06-08 问AI: 大语言模型中,思维链CoT是什么?

文心一言 在大语言模型中&#xff0c;思维链&#xff08;Chain-of-Thought, CoT&#xff09;是一种改进的提示策略&#xff0c;旨在提高大语言模型&#xff08;LLM&#xff09;在复杂推理任务中的性能。以下是对思维链CoT的详细解释&#xff1a; 定义&#xff1a; 思维链CoT是…

利用单调栈思路解决递增关系数据问题

利用单调栈思路解决递增关系数据问题 一、题目描述二、解题思路思路1&#xff1a;思路2&#xff1a; 三、代码实现1&#xff1a;暴力法2&#xff1a;单调栈 一、题目描述 在对数据进行排序的过程中&#xff0c;通常采用取1个数作为主元&#xff0c;通过比较交换&#xff0c;把…

学习分享-注册中心Naocs的优雅上下线

前言 学习微服务-分享一下Naocs的优雅上下线 Nacos Nacos&#xff08;Dynamic Naming and Configuration Service&#xff09;是阿里巴巴开源的一款用于动态服务发现、配置管理和服务管理的系统。Nacos 提供了丰富的功能&#xff0c;以便在分布式系统中进行服务管理和配置管…

Vue3 + TS + Antd + Pinia 从零搭建后台系统(一) 脚手架搭建 + 入口配置

简易后台系统搭建开启&#xff0c;分几篇文章更新&#xff0c;本篇主要先搭架子&#xff0c;配置入口文件等目录 效果图一、搭建脚手架&#xff1a;二、处理package.json基础需要的依赖及运行脚本三、创建环境运行文件四、填充vue.config.ts配置文件五、配置vite-env.d.ts使项目…

二百三十九、Hive——Hive函数全篇

--创建测试数据库test show databases ; create database if not exists test; use test;一、关系运算 1、等值比较&#xff1a; select 1 where 1 1; --1 select 1 where 0 1; --NULL 2、不等值比较&#xff1a;<> select 1 where 1 <> 2; --1 sele…

java 大型企业MES生产管理系统源码:MES系统与柔性化产线控制系统的关系、作用

MES定义为“位于上层的计划管理系统与底层的工业控制之间的面向车间层的管理信息系统”,它为操作人员/管理人员提供计划的执行、跟踪以及所有资源(人、设备、物料、客户需求等)的当前状态。 MES系统与柔性化产线控制系统的关系 MES&#xff08;制造执行系统&#xff09;是一种…

2003NOIP普及组真题 3. 数字游戏

线上OJ 地址&#xff1a; 【03NOIP普及组】数字游戏 此题考察的是 区间DP 前缀和 核心思想&#xff1a; 1、这道题主要考查了动态规划的思想。通过分析题目&#xff0c;可以发现需要 枚举环上所有划分为m组 的不同方案&#xff0c;来求得最大或最小值。属于 环上动态规划 问…

2024.6.7学习记录

1、css面试题复习加整理 2、dp刷题 也是水

动态语言的开源编译器汇总

对于动态语言而言&#xff0c;我们通常不会使用传统意义上的“编译器”&#xff0c;因为动态语言往往是在运行时解释执行的&#xff0c;或者被转换为中间形式&#xff08;如字节码&#xff09;&#xff0c;再由虚拟机执行。不过&#xff0c;为了性能考虑&#xff0c;现代动态语…

阅读笔记——《AFLNET: A Greybox Fuzzer for Network Protocols》

【参考文献】Pham V T, Bhme M, Roychoudhury A. Aflnet: a greybox fuzzer for network protocols[C]//2020 IEEE 13th International Conference on Software Testing, Validation and Verification (ICST). IEEE, 2020: 460-465.【注】本文仅为作者个人学习笔记&#xff0c;…

华媒舍:3步实际操作教大家快速升级活动策划实际效果

什么叫活动策划推广&#xff1f;活动策划推广指通过制定目标与执行一系列活动来推广宣传企业、产品和服务。这种活动可以包括线上与线下宣传营销、社会化营销、品牌合作等各种方式。正确活动策划推广能够帮助企业在竞争激烈的市场中突围&#xff0c;吸引住目标群体并提高销售总…

判断是否是平衡二叉树--c++【做题记录】

【问题描述】 设计算法判断一棵树是否是一棵平衡二叉树。 输入一组数据&#xff0c;按顺序构造出一个二叉排序树&#xff0c;不要平衡化&#xff0c;直接插入数据。判断树是否是平衡二叉树。 【参考算法】 递归算法 bool isBalance(BiNode *bt, int &height) //注意&…

【Java 反射】对于获取修饰符需要知道的事

反射 修饰符返回值 虚拟机规范表4.1、4.4、4.5和4.7中的访问修饰符标志常量 修饰符类型修饰符名称标志值&#xff08;十进制&#xff09;标志值&#xff08;十六进制&#xff09;PUBLIC公共10x00000001PRIVATE私有20x00000002PROTECTED保护40x00000004STATIC静态80x00000008…

堆排序---C语言

堆排序详解&#xff1a;点这里。 使用向下调整算法实现堆排序&#xff0c;完整代码 #include<stdio.h>void Swap(int* p1, int* p2) {int* tmp *p1;*p1 *p2;*p2 tmp; }void Print(int* arr, int n) {for (int i 0; i < n; i){printf("%d ", arr[i]);}…

【16】编写shell-批量导入mysql的sql语句

说明: 1、定时备份mysql的表sql语句,并且保留30天文件夹,会定期删除30天前的文件夹 2、根据业务场景需要,需要定时将表数据导出sql语句 3、定时将sql语句推送到另外指定的数据库中 4、编写shell脚本是实现批量导入mysql的sql语句 一、Shell脚本备份mysql表数语句 # !/bin/…

大语言模型的sft

https://zhuanlan.zhihu.com/p/692892489https://zhuanlan.zhihu.com/p/6928924891.常见的sft的开发流程 a.根据业务场景调整提示词;越详细越好,不要让模型理解歧义,拆分。 b.尝试闭源和开源,以评估LLM能够解决这类场景问题。 c.准备数据,包括多个子任务。 d.训练上线…

电脑提示缺失iUtils.dll文件怎么办,分享几种靠谱的解决方法

在现代科技发展迅猛的时代&#xff0c;电脑已经成为我们生活和工作中不可或缺的工具。然而&#xff0c;随着使用时间的增长&#xff0c;电脑也会出现一些问题&#xff0c;其中之一就是开机时弹出窗口提示找不到iUtils.dll文件。这个问题可能会给用户带来困扰和不便&#xff0c;…

Maven下载、安装、配置与使用教程

Maven下载、安装、配置与使用教程 目录 简介下载与安装配置使用示例总结 1. 简介 Maven是一个项目管理工具&#xff0c;主要用于Java项目。它可以自动化构建过程&#xff0c;包括编译、测试、打包和部署等。Maven使用POM&#xff08;Project Object Model&#xff09;文件来…

Python的登录注册界面跳转汽车主页面

1.登录注册界面的代码&#xff1a; import tkinter as tk from tkinter import messagebox,ttk from tkinter import simpledialog from ui.car_ui import start_car_ui# 设置主题风格 style ttk.Style() style.theme_use("default") # 可以根据需要选择不同的主题…