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
相关产品推荐
相关产品推荐

