You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt自定义QGraphicsItem hover事件仅在boundingRect边框触发如何解决

问题原因

你当前的shape()函数使用了QPainterPathStroker,它会将原本的填充矩形路径转换为仅包含边框的描边路径,Qt判断鼠标是否在控件范围内以shape()返回的路径为准,所以只有边框区域能响应悬浮事件,内部填充区域无法触发。

修复方法

直接修改shape()函数,返回你需要的填充矩形路径即可:

QPainterPath CustomizeItem::shape() const
{
  QPainterPath path;
  // 若要悬浮响应范围和绘制的红色矩形完全一致,保留这行
  path.addRect(_rectRect);
  // 若要悬浮响应范围覆盖整个_bbox区域,替换为下面这行
  // path.addRect(_bbox);
  return path;
}

补充优化(可选)

你当前的boundingRect()通过调用shape().boundingRect()计算,修改后逻辑是正确的。如果想要提升性能,也可以直接返回固定的矩形范围,比如return _bbox;,无需每次动态计算。
修改后测试即可看到,鼠标移动到红色矩形内部也会触发悬浮事件,小圆正常显示,只有鼠标完全移出响应范围才会触发hoverLeaveEvent。

内容的提问来源于stack exchange,提问作者user16138748

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:24:03