Qt QGraphicscene未执行正确的命中检测
我遇到一个问题,我的Qt QGraphicscene未执行正确的命中检测,qt,qgraphicsitem,qgraphicsscene,Qt,Qgraphicsitem,Qgraphicsscene,我遇到一个问题,我的QGraphicsItem不总是用鼠标执行正确的点击检测。我已经子类化了QGrahicsItem,并重写了shape()方法。我的shape()方法计算围绕直线的多边形。myboudingRect()函数计算完全包围该行的框。我附上了两个截图。第一个显示以蓝色突出显示的线,表示已触发悬停事件。第二个显示的是鼠标稍微向右移动,但是仍然在shape()和boundingRect()的范围内,但是悬停事件没有触发。你知道我做错了什么吗 我还应该注意,如果移动线的端点,命中检测通常开
QGraphicsItem
不总是用鼠标执行正确的点击检测。我已经子类化了QGrahicsItem
,并重写了shape()
方法。我的shape()
方法计算围绕直线的多边形。myboudingRect()
函数计算完全包围该行的框。我附上了两个截图。第一个显示以蓝色突出显示的线,表示已触发悬停事件。第二个显示的是鼠标稍微向右移动,但是仍然在shape()
和boundingRect()
的范围内,但是悬停事件没有触发。你知道我做错了什么吗
我还应该注意,如果移动线的端点,命中检测通常开始正常工作。它什么时候断裂似乎有点随机
注意:围绕直线的多边形是shape()
,而围绕该多边形的矩形是boundingRect()
更新
这似乎是
boundingRect()
的一个问题,因为我放大了一个非工作/部分工作的行。这条线会突然消失,就像它的boundingRect()不再在视口中一样,然而,情况显然不是这样,因为就在它消失之前,边界rect是可见的。没有代码,我们只能猜测问题出在哪里。正如您正确指出的,冲突是由QGraphicsItem的boundingRect()和shape()函数处理的,因此问题可能就在那里。检查它们是否返回项目的本地坐标。您可以在items的paint函数中绘制boundingRect,以显示返回的确切内容。屏幕截图上显示的是Drawed shape()和boundingRect()函数。线连接的节点的boundingRect如何?这可能是错误的并导致问题吗?我已经检查过了。这是正确的。