
有时需要获取直线与各种图形的交点,包括多边形和各种Qt图形框。
例如上图中,要想使连接线始终在多边形的边上,且能指向多边形中心,那么我们就要获取连线AB与多边形的交点。
1.多边形(QGraphicsPolygonItem)与直线(QLineF)的交点
//已知点和多边形
//A、B点可通过多边形的boundingRect().width()/2获取;
QPointF A;
QPointF B;
QGraphicsPolygonItem yellowItem;
QLineF lineAB(A,B); //AB连线
QPointF arrowPoint; //设置交点
QPolygonF yellowtPolygon = yellowItem->polygon();
QPointF p1 = yellowtPolygon.first() + yellowItem->pos();
//遍历各边连线
for (int i = 1; i < yellowtPolygon.count(); ++i) {
QPointF p2 = yellowtPolygon.at(i) + yellowItem->pos();
QLineF polyLine = QLineF(p1, p2);
//核心:判断是否相交
QLineF::IntersectType intersectType =
polyLine.intersect(lineAB, &arrowPoint);
if (intersectType == QLineF::BoundedIntersection)
break;
p1 = p2;
}
//arrowPoint 即为交点
从上面代码可以看到,一个多边形和直线的交点的实现,就是遍历直

本文介绍了如何在Qt中获取多边形(QGraphicsPolygonItem)或其它图形组件如QPushButton与直线(QLineF)的交点。通过遍历图形组件的边界并与直线进行比较,可以确定交点位置。此外,提供了Qt示例和 Diagram Scene 作为参考。
最低0.47元/天 解锁文章
4158

被折叠的 条评论
为什么被折叠?



