QLineF详解

一、描述

QLineF类使用浮点精度提供二维矢量。QLineF使用浮点精度来定义坐标线的起点和终点。

二、类型成员

QLineF::IntersectType:描述两条线之间的相交类型。

  • QLineF::NoIntersection:不相交,平行。
  • QLineF::UnboundedIntersection:不直接相交但延长线相交。
  • QLineF::BoundedIntersection:直接相交。

三、成员函数

1、qreal angle()

返回直线的角度(以度为单位)。返回值将在0.0到但不包括360.0的范围内。 角度是从x轴上的点到原点右侧(x> 0)逆时针测量的。

2、qreal angleTo(const QLineF &line)

返回两线夹角,并考虑线的方向。如果线不在其范围内相交,则以延伸线的交点作为原点。

3、QPointF center()

返回线的中点。

4、[static] QLineF fromPolar(qreal length, qreal angle)

使用长度和角度构造一条线段。其起点将在原点上。角度的正值表示逆时针方向,而负值表示顺时针方向。零度在3点钟位置。

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setPen(QPen(Qt::cyan,5));
    painter.drawLine(QLineF::fromPolar(100,-30));
}

5、QLineF::IntersectType intersect(const QLineF &line, QPointF *intersectionPoint)

获取两条直线的相交类型,如果相交(未直接相交也算),焦点付给参数2。

    QPainter painter(this);
    painter.setPen(QPen(Qt::cyan,5));

    QLineF l1(QPointF(50,50),QPointF(100,100));
    QLineF l2(QPointF(100,50),QPointF(50,100));

    painter.drawLine(l1);
    painter.drawLine(l2);
    painter.setPen(QPen(Qt::red,5));

    QPointF intersectionPoint;
    auto type = l1.intersect(l2,&intersectionPoint);
    painter.drawEllipse(intersectionPoint,3,3);

    QLineF l2(QPointF(20,40),QPointF(20,200));

6、bool isNull()

是否未设置起始点和终点。

7、qreal length()

获取长度。

8、QLineF normalVector()

返回一条与当前线段垂直且长度相同的线段。

9、QPointF pointAt(qreal t)

返回由t指定的参数化位置上的点。如果t = 0,该函数返回直线的起点,如果t = 1,则返回直线的终点。

10、void setAngle(qreal angle)

设置角度。这将改变线的第二点的位置。

11、void setLength(qreal length)

设置长度。这将改变线的第二点的位置。如果该行是空线段,则不管指定的长度如何,该长度都将保持为零。

12、QLine toLine()

返回基于整数的副本。返回的行的起点和终点四舍五入为最接近的整数。

13、void translate(const QPointF &offset)

用给定的偏移量平移线段。

14、QLineF translated(const QPointF &offset)

返回平移后的副本。

15、QLineF unitVector()

返回线段的单位向量。线段的单位向量的长度为1,方向与线段相同。单位向量

    QLineF l1(QPointF(50,50),QPointF(100,100));
    auto v = l1.unitVector();
    qDebug()<<"单位向量长度:"<<v.length();
    qDebug()<<"单位向量角度:"<<v.angle();

    qDebug()<<"线段长度:"<<l1.length();
    qDebug()<<"线段角度:"<<l1.angle();

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值