Qt nativeEvent 不触发/不执行/无效

news/2024/12/2 19:46:03/文章来源:https://www.cnblogs.com/GengMingYan/p/18582516

在做触摸屏项目的时候,各种控件都需要实现监听/触发点击事件,通常是通过信号/槽、事件过滤器(eventFilter)、重写mousePressEvent。

发现在QSpinBox中点击编辑框时不会触发任何鼠标相关点击事件。

 查资料发现通过重写nativeEvent函数可以拿到鼠标相关事件,不过有一个坑需要注意,需要显示调一下this->winId()  nativeEvent才能正常触发!

 

class Q_DECL_EXPORT QSpinBoxDemo : public QSpinBox
{Q_OBJECT
public:QSpinBoxDemo(QWidget *wid);bool nativeEvent(const QByteArray &eventType, void *message, long *result) override;
};

 

QSpinBoxDemo::QSpinBoxDemo(QWidget* wid):QSpinBox(wid) {setFocusPolicy(Qt::ClickFocus);this->winId();//必须,不然nativeEvent不触发}bool QSpinBoxDemo::nativeEvent(const QByteArray &eventType, void *message, long *result)
{Q_UNUSED(eventType);MSG *msg = static_cast<MSG *>(message);// qDebug() << msg->message;// 检测鼠标按下和松开事件if (msg->message == WM_LBUTTONDOWN) {qDebug() << "Mouse Button Pressed at: (" << msg->pt.x << ", " << msg->pt.y << ")";}if(msg->message == WM_LBUTTONUP) {this->clearFocus();//清除焦点,防止选中数字时不触发事件}return QSpinBox::nativeEvent(eventType, message, result);
}

感谢知乎中某个大佬的合理解释为什么必须调winId()后才会正常触发nativeEvent:

 

 

(99+ 封私信 / 80 条消息) 为什么 QT 的控件句柄只有用了 winId() 才能被捕捉到? - 知乎

 

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

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

相关文章

testnet 资产管理系统 侦察|扫描|信息收集|网络空间搜索

TestNet简介 TestNet资产管理系统旨在提供全面、高效的互联网资产管理与监控服务,构建详细的资产信息库。 该系统能够帮助企业安全团队或渗透测试人员对目标资产进行深入侦察和分析,提供攻击者视角的持续风险监测,协助用户实时掌握资产动态,识别并修复安全漏洞,从而有效收…

记录---前端实现画中画超简单,让网页飞出浏览器

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣Document Picture-in-Picture 介绍今天,我来介绍一个非常酷的前端功能:文档画中画 (Document Picture-in-Picture, 本文简称 PiP)。你有没有想过,网页上的任何内容能悬浮在桌面上?😏 🎬 视频流媒体的画中画功能你…

洛谷题单指南-线段树-P4513 小白逛公园

原题链接:https://www.luogu.com.cn/problem/P4513 题意解读:给定序列a[n],支持两种操作:1.查询区间[l,r]内的最大子段和 2.将a[x]修改成s,输出其中每一个查询操作的结果。 解题思路:区间问题依然想到线段树,问题主要在于线段树的节点要维护哪些信息: 最直接的,肯定要…

LeetCode 2413[最小偶倍数]

LeetCode 2413[最小偶倍数]题目 链接 LeetCode 2413[最小偶倍数] 详情实例提示题解 思路 判断奇偶性 奇数乘以2并返回 偶数直接返回 代码 class Solution { public:int smallestEvenMultiple(int n) {if (0 == (n % 2))return n;return 2 * n;} };本文来自博客园,作者:EricsT…

power BI

工作一:实现地图 1、先启用地图功能2、导入数据 获取数据更改数据类型检测:加载出现在右侧

使用服务器docker搭建Pwn题目

一、docker的安装 1、安装前先卸载操作系统默认安装的docker sudo apt-get remove docker docker-engine docker.io containerd runc 2、安装必要支持 sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release 3、添加gpg KE…

Windows系统下通过命令行获取进程指标

1.获取当前ProcessID。GetCurrentProcess2.执行cmd或PowerShell cmd:wmic process where "processid=15844" get /format:list PowerShell:Get-Process -id 15844 | Format-List * 作者:快雪 出处:http://www.cnblogs.com/kuaixue/ 本文版权归作者所有,欢迎转…

各层协议

原文链接:点我

技术框架中ORM概念和原理的学习

ORM概念和原理 ORM 概念 我们在介绍 MyBatis 时说到,MyBatis是一种半自动 ORM 实现。那何为 ORM,何为半自动? ORM(Object/Relation Mapping,对象/关系数据库映射)是一种描述对象与关系数据库之间映射的规范。 ORM 作用Java对象和关系数据库如同马和牛,简直是牛头不对马嘴…

在华为开发者空间,基于鲲鹏服务器快速开发打砖块小游戏

本案例将指导开发者如何在鲲鹏服务器部署并运行web小游戏。本文分享自华为云社区《基于鲲鹏服务器的打砖块小游戏部署》,作者: 开发者空间小蜜蜂。 1.1 案例介绍 鲲鹏服务器是基于鲲鹏处理器的新一代数据中心服务器,适用于大数据、分布式存储、高性能计算和数据库等应用。鲲…

5-文件上传漏洞

1、文件上传漏洞原理 1.1 一句话木马 <?php @eval($_POST[xu]); ?> 其中@表示忽略错误,eval()函数表示把传进去的字符串作为php代码执行 从http post里面拿到参数叫xu的value,然后作为代码去执行,并忽略错误 2、Webshell介绍 一句话木马、大马、小马、图片马都是web…

纯血鸿蒙进程加速,混合app开发迎来又一波新机会

对于开发者来说,未来相当一段时间,将来会为鸿蒙,安卓,IOS三个系统同时开发APP上架,其中面对全新的鸿蒙系统,百万APP在未来几年会重新开发上架。 鸿蒙SDK厂商及App开发团队,迎来新的市场机遇。时间不知不觉又来到了2024年最后一个月,又到了辞旧迎新,复盘今年,放眼明年…