Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QGraphicscene未执行正确的命中检测_Qt_Qgraphicsitem_Qgraphicsscene - Fatal编程技术网

Qt QGraphicscene未执行正确的命中检测

Qt QGraphicscene未执行正确的命中检测,qt,qgraphicsitem,qgraphicsscene,Qt,Qgraphicsitem,Qgraphicsscene,我遇到一个问题,我的QGraphicsItem不总是用鼠标执行正确的点击检测。我已经子类化了QGrahicsItem,并重写了shape()方法。我的shape()方法计算围绕直线的多边形。myboudingRect()函数计算完全包围该行的框。我附上了两个截图。第一个显示以蓝色突出显示的线,表示已触发悬停事件。第二个显示的是鼠标稍微向右移动,但是仍然在shape()和boundingRect()的范围内,但是悬停事件没有触发。你知道我做错了什么吗 我还应该注意,如果移动线的端点,命中检测通常开

我遇到一个问题,我的
QGraphicsItem
不总是用鼠标执行正确的点击检测。我已经子类化了
QGrahicsItem
,并重写了
shape()
方法。我的
shape()
方法计算围绕直线的多边形。my
boudingRect()
函数计算完全包围该行的框。我附上了两个截图。第一个显示以蓝色突出显示的线,表示已触发悬停事件。第二个显示的是鼠标稍微向右移动,但是仍然在
shape()
boundingRect()
的范围内,但是悬停事件没有触发。你知道我做错了什么吗

我还应该注意,如果移动线的端点,命中检测通常开始正常工作。它什么时候断裂似乎有点随机

注意:围绕直线的多边形是
shape()
,而围绕该多边形的矩形是
boundingRect()

更新
这似乎是
boundingRect()
的一个问题,因为我放大了一个非工作/部分工作的行。这条线会突然消失,就像它的boundingRect()不再在视口中一样,然而,情况显然不是这样,因为就在它消失之前,边界rect是可见的。

没有代码,我们只能猜测问题出在哪里。正如您正确指出的,冲突是由QGraphicsItem的boundingRect()和shape()函数处理的,因此问题可能就在那里。检查它们是否返回项目的本地坐标。您可以在items的paint函数中绘制boundingRect,以显示返回的确切内容。屏幕截图上显示的是Drawed shape()和boundingRect()函数。线连接的节点的boundingRect如何?这可能是错误的并导致问题吗?我已经检查过了。这是正确的。