我正在使用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.polys
是一个 QPolygons
的列表,而 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
添加到列表中可能会出现问题吗?
QPolygon.contains()
是用来判断一个点是否在多边形内部,而不仅仅是在多边形的顶点上。 - Jonathan Liu