解决Qt graphis-view框架中,上层图元接收hover事件导致底层图元接收不到的问题
问题重现
两个图元,一个在上面,名为item_up,一个在下面,名为item_below。
当item_up->setAcceptHoverEvents(true)时,item_up可以接收到鼠标悬停事件(hoverEnter,hoverMove,hoverMove)。但是下层的item_below在重叠区域就接收不到悬停信号了。除非item_up->setAcceptHoverEvents(false),item_below才能在鼠标经过重叠区域时接收到悬停信号组。
问题分析
采用过各种方法,都不能很好地解决这个问题。于是最终考虑采用自定义事件的方法,自己实现。
解决方案
自定义三个事件,鼠标进入,鼠标移动,鼠标退出。
在画布的鼠标移动事件处理函数mouseMoveEvent中,将鼠标事件转换为图元的鼠标选题悬停事件,发送给当前鼠标下的所有图元,并结合判断acceptHoverEvents()来确定图元是否需要接收此事件,减少计算量。
在图元中的sceneEvent中响应三个信号。或者自定义一个图元基类,实现事件识别与处理函数分配,并定义三个虚函数,用于子类重新实现自定义事件响应。
note
使用event->ignore()不能解决重叠导致的事件传递中断问题。
点击事件即使在图元重叠的状态下也可以接收到。
本文来自博客园,作者:撬动未来的支点,转载请注明原文链接:https://www.cnblogs.com/pivotfuture/p/16297427.html
CSDN:撬动未来的支点,公众号:Qt未来工程师,网站:www.qtfuture.cn
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!