QLineF
QLineF与QLine不同在于提供了浮点精度线段表示,在成员函数方面增加了角度,单位向量等的表示,不过线段的表示法还是一样的,由两个点起点与终点标识。
QLineF 构造函数:
QLineF()
QLineF(const QPointF &p1, const QPointF &p2)
QLineF(qreal x1, qreal y1, qreal x2, qreal y2)
QLineF(const QLine &line)
由此可以看出,QLineF是由两个点组成的线段。使用有一下几种属性:
开始点:
QPointF p1() const //获取开始点
void setP1(const QPointF &p1) //设置开始点
结束点:
QPointF p2() const //获取开始点
void setP2(const QPointF &p1) //设置开始点
线段长度:
qreal length() const // 获取线段长度
void setLength(qreal length) //设置线段长度
设置线段长度是根据开始点开始的线段长度,设置后p2的点位置会发生变化,此方法可以延长或缩短线段长度,如果要反向延长线段长度的话,可以把长度的值设置为负数,即可求得反向延长所得的线段的p2的值,例如:
line.setLength(-30); //以p1,p2的直线,延p1反向延伸30px的长度的线段,所得的点为p2(小技巧)
线段的角度:
void setAngle(qreal angle) //设置角度
qreal angle() const //获取角度
qreal angleTo(const QLineF &line) const //两直线的夹角
注意:这个setAngle函数是绝对角度,不是想对的,如果想在之前直线的前提下旋转角度,需要获取当前的角度,+/-我们的旋转角度,例如:
line.setAngle(line.angle() + 20);
线段中心点:
QPointF center() const //中心点
两条直线的交点:
IntersectType intersect(const QLineF &line, QPointF *intersectionPoint) const
这个函数是计算两条直线的交点,intersectionPoint是交点坐标,返回相交的类型
enumQLineF::IntersectType
QlineF::UnboundedIntersection 在线段范围外相交,表示两条线段实际不相交,但是其所在直线是相交的
QlineF::BoundedIntersection 在线段范围内相交, 表示两条线段实际相交,在其所有的长度范围中
QlineF::NoIntersection 不相交,表明两条线是平行的
本文主要是介绍QLineF的一些常用的函数及小技巧,用于学习交流。
Qt技术交流群:168934975。