Qt QPainterPath和直线的交点(通过x查找QPainterPath y)

Qt QPainterPath和直线的交点(通过x查找QPainterPath y),qt,point,qpainter,line-intersection,Qt,Point,Qpainter,Line Intersection,我有绘画路径。我需要通过x找到QPainterPath的y坐标 我在QPainterPath中找到intersected()方法。所以,我创建了新的QPainterPath,它是路径边界矩形从左到右边缘与x坐标的直线,以查找交点 intersects()方法返回true。但是intersected()返回空路径 如果我使用高度为1的rect而不是line,那么一切都可以正常工作 也许您更了解如何找到QPainterPath与line的交点?根据文档: QPainterPath QPainterP

我有绘画路径。我需要通过x找到QPainterPath的y坐标

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

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

如果我使用高度为1的rect而不是line,那么一切都可以正常工作


也许您更了解如何找到QPainterPath与line的交点?

根据文档:

QPainterPath QPainterPath::相交(常数QPainterPath&p)常数 返回一条路径,该路径是该路径的填充区域和p的填充区域的交点。 由于Bezier曲线相交的数值不稳定,Bezier曲线可能被展平为线段

由于您的线没有填充区域,因此此函数似乎不适用于您

如果使用QGraphicscene显示QPainterPath,则可以使用CollindingItems方法:

QList qgraphicscene::collingitems(常量QGraphicsItem*item,Qt::ItemSelectionMode=Qt::IntersectsItemShape)常量 返回与项目冲突的所有项目的列表。通过调用QGraphicsItem::CollizeSwithitem()确定冲突;碰撞检测由模式确定。默认情况下,将返回其形状与项目相交或包含在项目形状内的所有项目。 项目以降序堆叠顺序返回(即,列表中的第一个项目是最上面的项目,最后一个项目是最下面的项目)


不幸的是,QPainter似乎没有相同的功能。我认为您创建长矩形的方法可能更容易做到这一点。

谢谢您的回答。不幸的是,我不使用qgraphicscene。我发现intersected()方法会导致堆栈溢出:(因此,我似乎只需要找到带有y的QPainterPath::Element,它最接近我所需要的。您可能应该切换到
Qgraphicscene
,它最适合处理多个项目。否则,创建一个
QList
,并跟踪您在
QPainter
上抛出的每个路径,然后您可以迭代该列表并执行。)搜索具有适当x坐标的路径。我建议添加类似功能:正确的链接是: