QPolygon containsPoints未获得预期结果

时间:2017-04-29 14:14:43

标签: qt

我目前正在使用QT。我是新手,但是,我想要做的就是在我的窗口画一条线并在这里做一个多边形,所以当我用线上的鼠标点击时我会知道找到她。所以我试图使用多边形的containsPoints()方法,但它没有任何参数OddEvenFill或WindingFill。

所以这里是我创建多边形的一些代码:

 QPoint topLeft(mStartPoint.x() - 2, mStartPoint.y() - 5);
QPoint topRight(mStartPoint.x() - 2, mStartPoint.y() + 5);
QPoint bottomRight(endPoint.x() + 2, endPoint.y() - 5);
QPoint bottomLeft(endPoint.x() + 2, endPoint.y() + 5);

QVector<QPoint> polygPoints{ topLeft,bottomLeft,topRight,bottomRight};

QPolygon area(polygPoints);

以下是我试图找到的代码:

for (int i = 0; i < edges->size(); i++) {

   if((*edges)[i]->getArea().containsPoint(posEdge,Qt::WindingFill)){
       index = i;
       break;
    }
}

因此,例如,我有一个多边形,其中的坐标值为theese值:

topLeft - x = 51, y = 49
topRight - x = 124, y = 69
bottomLeft - x = 51, y = 59
bottomRight - x = 124,y = 54

并且我点击的点的位置是:x = 80,y = 56 和

containPoints()

方法仍然变为false,因为该点不在多边形内部。 你知道我做错了什么吗?我会非常感谢你的每一次帮助。

1 个答案:

答案 0 :(得分:0)

您可以用图形方式定义多边形的点 - 如下所示:

| ⁄|
|⁄ |

尝试像绘制矩形一样定义点:

|  |
|__|

这是QVector<QPoint> polygPoints{topLeft, bottomLeft, bottomRight, topRight};。此外,您可以重复起点topLeft。以这种方式定义多边形,它是一个矩形而不是两个三角形,并且contains函数应该像你期望的那样。