QlineF::angle()函數在官方文檔中如下定義:
The angles are measured counter-clockwise from a point on the x-axis to the right of the origin (x > 0).
從X軸正方向沿逆時針轉動,直到與QLineF(p1, p2)平行,轉過的角度,就是angle()的返回值。其中,QlineF的指向是從p1指向p2.
看下面的界面:
矢量返回的角度是0,因爲它與x軸正方向平行。
第二個例子:
由於Qt的世界裏,Y軸指向屏幕下方,所以(1,1)出現在四個象限的右下。顯然,從X軸正方向要沿逆時針轉動315度才能與之平行。
第三個例子(不再解釋了,原因同第二個例子):
最後附上代碼(on_pushButton_clicked()函數):
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
double dx1, dy1, dx2, dy2;
dx1 = ui->p1x->value();
dy1 = ui->p1y->value();
dx2 = ui->p2x->value();
dy2 = ui->p2y->value();
QLineF lnef(QPointF(dx1, dy1), QPointF(dx2, dy2));
ui->label->setText(QString().setNum(lnef.angle()));
}
void MainWindow::on_pushButton_2_clicked()
{
double dLen = ui->dBoxLen->value();
double dAngle = ui->dBoxAngle->value();
QLineF lnef = QLineF::fromPolar(dLen, dAngle);
ui->label_3->setText(QString("p1 = %1,%2; p2 = %3,%4").arg(lnef.p1().x()).arg(lnef.p1().y()).arg(lnef.p2().x()).arg(lnef.p2().y()));
}