4

我有 QPainterPath。我需要通过 x 找到 QPainterPath 的 y 坐标。

我在 QPainterPath 中找到了 intersected() 方法。因此,我创建了新的 QPainterPath,它是从我的路径边界矩形的左到右边缘与 x 坐标的线,以找到相交结果的点。

intersects() 方法返回 true。但是 intersected() 返回空路径。

如果我使用高度 = 1 的矩形而不是线,一切正常。

也许您对如何找到 QPainterPath 与线的交集有更好的想法?

4

1 回答 1

2

根据文档:

QPainterPath QPainterPath::intersected ( const QPainterPath & p ) const

返回一个路径,该路径是该路径的填充区域和 p 的填充区域的交集。由于进行贝塞尔曲线相交的数值不稳定性,贝塞尔曲线可能会被展平为线段。

由于您的线没有填充区域,因此此功能似乎不适合您。

如果您使用 QGraphicsScene 来显示您的 QPainterPath,您可以使用方法 collidingItems:

QList QGraphicsScene::collidingItems ( const QGraphicsItem * item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape ) const

返回与项目冲突的所有项目的列表。碰撞是通过调用 QGraphicsItem::collidesWithItem(); 来确定的。碰撞检测由模式决定。默认情况下,返回形状与 item 相交或包含在 item 形状内的所有项目。项按堆叠降序返回(即,列表中的第一项是最上面的项,最后一项是最下面的项)。

不幸的是,QPainter 似乎没有相同的功能。我认为您创建长矩形的方法可能是一种更简单的方法。

于 2012-02-22T13:07:40.260 回答