当前位置: 首页 > ai >正文

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。

问题

在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事件,这个问题主要是因为QWebEngineView在加载网页后,其内部有一个子窗口(通常是QOpenGLWidget)接管了鼠标事件,导致父类的鼠标事件处理函数无法被触发。

解决方案

通过重载event函数,截取QEvent::ChildAdded事件,然后为子部件安装事件过滤器。这样可以在事件过滤器中捕获鼠标事件。具体步骤如下:
1、在自定义的QWebEngineView类中重写event函数
2、判断事件类型是否为QEvent::ChildAdded
3、如果是,则获取子对象(通常是QOpenGLWidget),并为它安装事件过滤器
4、在eventFilter函数中处理鼠标事件

#include <QWebEngineView>class CustomWebView : public QWebEngineView {
public:CustomWebView(QWidget* parent = nullptr) : QWebEngineView(parent) {// 关键:设置事件捕获setAttribute(Qt::WA_AcceptTouchEvents);}protected:bool event(QEvent* event) override {// 捕获子控件创建事件if (event->type() == QEvent::ChildAdded) {QChildEvent* childEvent = static_cast<QChildEvent*>(event);if (childEvent->child()->isWidgetType()) {childEvent->child()->installEventFilter(this); // 为子控件安装过滤器}}return QWebEngineView::event(event);}bool eventFilter(QObject* obj, QEvent* event) override {// 处理鼠标按下事件。其他事件也是同理if (event->type() == QEvent::MouseButtonPress) {QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);qDebug() << "捕获到点击位置:" << mouseEvent->pos();return true; // 拦截该事件,不再继续传递。如果只做捕获,这里不要返回。}return QWebEngineView::eventFilter(obj, event);}
};
http://www.xdnf.cn/news/13038.html

相关文章:

  • Origin图像数字化工具——如何复制其他人的图表作为对比数据
  • Linux 下部署安装docker
  • 京东商品sku抓取攻略|已封装API接口调用示例
  • SpringBoot配置
  • 【如何做好技术架构】
  • 大模型真的像人一样“思考”和“理解”吗?​
  • Python编程基础(五) | 字典
  • 深度伪造视频时代的“火眼金睛”:用Python打造假视频识别神器
  • 循环语句之for
  • Latex vscode安装、配置与使用-Windows
  • 文件上传漏洞防御全攻略
  • 从零手写Java版本的LSM Tree (六):WAL 写前日志
  • Chrome二级标签无法选中的解决方案
  • LMKD(Low Memory Killer Daemon)原理初识
  • Linux与量子计算:面向未来的架构演进
  • 在 Spring Boot 项目里,MYSQL中json类型字段使用
  • 快速解决 AJ-Captcha 自定义水印和底图问题
  • day36-多路IO复用
  • 前端Vue框架页面自适应问题:挑战与系统化解决方案
  • RetiZero
  • Kafka入门-Broker以及文件存储机制
  • 进程地址空间(比特课总结)
  • AI人工智能与LLM语言大模型
  • 从落水到快速救援:北斗如何打通生命通道
  • Cursor+MCP编程工具助力开发效率倍增
  • 魔兽世界正式服插件与宏-敏锐盗贼实用宏探索(2)-起手奥义【突】之见龙在田
  • Bigemap 赋能地质灾害应急预警系统:精准监测与智能响应
  • Vue3+Pinia+TS笔记
  • 网关对请求解密响应加密
  • 背包问题双雄:01 背包与完全背包详解(Java 实现)