首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找QPolygon是否包含QPoint --没有给出预期的结果

查找QPolygon是否包含QPoint --没有给出预期的结果
EN

Stack Overflow用户
提问于 2016-10-18 06:07:33
回答 1查看 2.3K关注 0票数 5

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

代码语言:javascript
复制
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()是鼠标的位置。我试着进入

代码语言:javascript
复制
print(poly)
print(poly.contains(QPoint(1,1)))

若要测试它是否适用于控制点,但在控制台中,它只提供以下内容:

代码语言:javascript
复制
<PySide.QtGui.QPolygon(QPoint(50,350) QPoint(50,0) QPoint(0,0) QPoint(0,350) )  at 0x000000000547D608>
False

这里是否有我做错了什么,或者我如何将上面的“多边形”转换成我可以使用的实际QPolygon

编辑:

这是用于生成列表self.polys的代码

代码语言:javascript
复制
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添加到列表中可能会有问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 06:27:29

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

您所要寻找的,大概是一个函数,如果点驻留在多边形中,而不是在多边形上,则返回true。您要寻找的函数是QPolygon.containsPoint ( QPoint , Qt.FillRule )。问题就像你想的那样,第二个值要么是1,要么是0(分别表示为Qt.OddEvenFill或Qt.WindingFill ),这决定了判断点是否在多边形内的方法。有关Qt.FillRule的信息可以在这里找到:01/com/trolltech/qt/core/Qt.FillRule.html

修正代码:

代码语言:javascript
复制
print(poly)
print(poly.containsPoint(QPoint(1,1), Qt.OddEvenFill))
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40100733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档