gpt4 book ai didi

python - 查找 QPolygon 是否包含 QPoint - 未给出预期结果

转载 作者:行者123 更新时间:2023-12-05 00:17:32 25 4
gpt4 key购买 nike

我正在 PyQt 中开发一个程序并创建一个小部件,该小部件在该网格上显示一个网格和一组多边形,您可以四处移动并单击它们。当我尝试实现多边形的点击时,它似乎不起作用。以下是不起作用的功能:

def mouseMoveCustom(self, e):
for poly in reversed(self.polys):
if poly.contains(e.pos()):
self.cur_poly = poly
self.setCursor(Qt.PointingHandCursor)
print('mouse cursor in polygon')
break
else:
self.setCursor(Qt.CrossCursor)

对于上下文, self.polysQPolygons 的列表和 e.pos()是鼠标位置。我试过输入
print(poly)
print(poly.contains(QPoint(1,1)))

测试它是否适用于控制点,但在控制台中,它只给了我这个:
<PySide.QtGui.QPolygon(QPoint(50,350) QPoint(50,0) QPoint(0,0) QPoint(0,350) )  at 0x000000000547D608>
False

我在这里做错了什么,或者如何将上面的“多边形”转换为实际的 QPolygon我可以与之合作?

编辑:

这是用于生成列表的代码 self.polys :
self.polys.append(QPolygon([QPoint(points[i][X]+self.transform[X], points[i][Y]+self.transform[Y]) for i in range(len(points))]))

使用内联 for 循环添加 QPolygons 可能有问题吗?到名单?

最佳答案

这不起作用的原因是因为 bool QPolygon.contains( QPoint )如果该点是多边形的顶点之一,或者该点落在多边形的边缘上,则返回 true。在您的设置中会返回 true 的点的一些示例是 QPoint(0,0) , QPoint(0,200) ,或任何符合这些条件的任何内容。

据推测,您正在寻找的是一个函数,如果该点位于多边形内而不是在多边形上,则该函数返回 true。您要找的函数是 QPolygon.containsPoint ( QPoint , Qt.FillRule ) .点如您所想,第二个值是 1 或 0(分别表示为 Qt.OddEvenFill 或 Qt.WindingFill),这决定了用什么方法来确定点是否在多边形内。关于 Qt.FillRule 的信息可以在这里找到:https://doc.qt.io/archives/qtjambi-4.5.2_01/com/trolltech/qt/core/Qt.FillRule.html

更正的代码:

print(poly)
print(poly.containsPoint(QPoint(1,1), Qt.OddEvenFill))

关于python - 查找 QPolygon 是否包含 QPoint - 未给出预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40100733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com