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

win下qwidget全屏弹窗后其他窗口鼠标样式无法更新的问题

        在win平台下,实现截取选桌面执行推理功能,用一个qwidget(j对象名为m_selectWidget)来显示选取范围的边框,但这个qwidget显示后,其他窗口在他下面可以接受鼠标相应的事件,但原来的鼠标形状功能失效(mac正常),分析原因是上层是m_selectWidget,而m_selectWidget的形状为Qt::ArrowCursor,通过分析,在win平台下,已当前鼠标所在的widget为最后一个鼠标形状,所以下层的鼠标形状修改后马上又被m_selectWidget的Qt::ArrowCursor覆盖,导致鼠标形状一直为Qt::ArrowCursor。

        通过源码的分析,发现一个解决方案一:

1、重载QApplication的notify接口,当QEvent的类型为QEvent::CursorChange的时候,发送一个信号(例如:sigCursorChange)

2、m_selectWidget绑定这个信号,在槽函数获取当前鼠标所在的qwidget,然后吧m_selectWidget自身的形状设置为此qwidget的形状即可

方案二:通过win系统api修改m_selectWidget的属性,忽略所有的鼠标事件。

关键代码:SetWindowLongPtr((HWND)m_selectWidget->winId(), GWL_EXSTYLE, GetWindowLong((HWND)m_selectWidget->winId(), GWL_EXSTYLE) | WS_EX_TRANSPARENT | WS_EX_LAYERED);

相关地址:

SetWindowLongPtrA function (winuser.h) - Win32 apps | Microsoft Learn

Window Features - Win32 apps | Microsoft Learn

方案三:

最简单的方案,通过设置属性

m_selectWidget->setWindowFlags(Qt.WindowTransparentForInput);

注意:方案二和方案三子类也无法获取输入操作

http://www.lryc.cn/news/128061.html

相关文章:

  • Java【数据结构】二分查找
  • 数据库技术--数据库引擎,数据访问接口及其关系详解(附加形象的比喻)
  • 【BASH】回顾与知识点梳理(三十三)
  • 同步请求和异步请求
  • Transformer是什么,Transformer应用
  • 故障011:dmap服务缺失libnsl.so修复
  • 第十三章 SpringBoot项目(总)
  • 利用Python隧道爬虫ip轻松构建全局爬虫网络
  • Spring Clould 网关 - Gateway
  • PHP使用phpmailer及SMTP服务实现邮件发送
  • 交换实验一
  • 计算机中丢失MSVCR120.dll,找不到MSVCR120.dll是什么意思?
  • avue多选列表根据后端返回的某个值去判断是否选中;avue-curd多选回显
  • Vue2中根据权限添加动态路由
  • 搭建 Python 环境 | Python、PyCharm
  • NPOI 读取和写入Excel
  • Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile)
  • C++ 网络编程项目fastDFS分布式文件系统(三)-Nginx部分
  • Apache-DBUtils
  • LangChain手记 Agent 智能体
  • 87-基于stm32单片机粮仓仓库环境温湿度烟雾监测报警系统Proteus仿真+源码
  • ChatGPT 调教日记(二):程序员转量化的背景知识
  • 什么是网络地址转换 (NAT)
  • 系统架构设计师---事务管理、并发控制、数据库的备份与恢复
  • 如何更好的维护自己的电脑?
  • element+vue 表格行拖拽功能
  • Python学习笔记_基础篇(三)_数据类型之列表
  • 目标检测YOLO实战应用案例100讲-交通目标检测中传感器数据采集容错控制方法
  • ElasticSearch 8.9.0 开发模式安装
  • docker部署redis