/**
******************************************************************************
* @link https://blog.csdn.net/sy_lixiang
* @author EMMA
* @version V1.0.0
* @date 2024.09.11
* @brief 转载请注明出处
******************************************************************************
*/
#include "qlinefdemo.h"
#include <QIcon>
#include "drawangle.h"
#include "drawangleto.h"
#include "drawfrompolar.h"
#include "drawintersect.h"
#include "drawlength.h"
#include "drawnormalvector.h"
#include "drawpointat.h"
#include "drawtoline.h"
#include "drawunitvector.h"
QLineFDemo::QLineFDemo(QWidget *parent)
: QWidget(parent)
{
//设置窗体标题
setWindowTitle(tr("CH2104,Qt基础类之QLineF浮点直线类"));
//设置窗体图标
QString iconPath="E:\\Git-workdir\\learn_QT5\\learn_-qt5\\QT5\\CH21\\CH2104\\QLineFDemo\\";
QString iconFileName="application-one.png";
QString iconFullPath=iconPath+iconFileName;
setWindowIcon(QIcon(iconFullPath));
//左侧GroupBox
leftGroupBox=new QGroupBox();
leftGroupBox->setTitle(tr("成员函数"));
//右上GroupBox
rightTopGroupBox=new QGroupBox();
rightTopGroupBox->setTitle(tr("非成员函数"));
//右下GroupBox
rightBottomGroupBox=new QGroupBox();
rightBottomGroupBox->setTitle(tr("QLineF帮助"));
//左侧功能按钮设置
btnAngle=new QPushButton();
btnAngle->setText(tr("qreal QLineF::angle() const"));
btnAngleTo=new QPushButton();
btnAngleTo->setText(tr("qreal QLineF::angleTo(const QLineF &&line) const"));
btnFromPolar=new QPushButton();
btnFromPolar->setText(tr("[static] QLineF QLineF::fromPolar(qreal length, qreal angle)"));
btnIntersect=new QPushButton();
btnIntersect->setText(tr("QLineF::IntersectType QLineF::intersect(const QLineF &&line, QPointF *intersectionPoint) const"));
btnLength=new QPushButton();
btnLength->setText(tr("qreal QLineF::length() const"));
btnNormalVector=new QPushButton();
btnNormalVector->setText(tr("QLineF QLineF::normalVector() const"));
btnPointAt=new QPushButton();
btnPointAt->setText(tr("QPointF QLineF::pointAt(qreal t) const"));
btnToLine=new QPushButton();
btnToLine->setText(tr("QLine QLineF::toLine() const"));
btnUnitVector=new QPushButton();
btnUnitVector->setText(tr("QLineF QLineF::unitVector() const"));
//右上功能按钮设置
btnOperator1=new QPushButton();
btnOperator1->setText(tr("QDataStream &&operator<<(QDataStream &&stream, const QLineF &&line)"));
btnOperator2=new QPushButton();
btnOperator2->setText(tr("QDataStream &&operator>>(QDataStream &&stream, QLineF &&line)"));
//多文本框设置
textEdit=new QTextEdit();
textEdit->setText(tr("QLineF类提供一个使用浮点精度的二维向量。"));
textEdit->append(tr(""));
textEdit->append(tr("QLineF描述了二维平面上的有限长度的线(或线段)。QLineF使用坐标的浮点精度定义行的起点和终点。使用toLine()函数检索该行的整数副本。"));
textEdit->append(tr(""));
textEdit->append(tr("可以使用p1(), x1(), y1(), p2(), x2()和y2()函数检索行起始点和结束点的位置。dx()和dy()函数分别返回直线的水平和垂直分量。"));
textEdit->append(tr(""));
textEdit->append(tr("可以使用length()函数检索行长度,并使用setLength()函数更改行长度。类似地,angle()和setAngle()分别用于检索和更改线的角度。使用isNull()函数确定QLineF表示的是有效行还是空行。"));
textEdit->append(tr(""));
textEdit->append(tr("intersect()函数确定这条线和给定的线的IntersectType,而angleTo()函数返回这两条线之间的角度。此外,unitVector()函数返回的直线起点与这条直线相同,但长度只有1,而normalVector()函数返回的直线垂直于这条直线,起点和长度相同。"));
textEdit->append(tr(""));
textEdit->append(tr("最后,可以使用translate()函数将该行设置为给定的偏移量,并且可以使用pointAt()函数遍历该行。"));
textEdit->append(tr(""));
/*********左侧*********/
leftLayout=new QVBoxLayout;
leftLayout->addWidget(btnAngle);
leftLayout->addWidget(btnAngleTo);
leftLayout->addWidget(btnFromPolar);
leftLayout->addWidget(btnIntersect);
leftLayout->addWidget(btnLength);
leftLayout->addWidget(btnNormalVector);
leftLayout->addWidget(btnPointAt);
leftLayout->addWidget(btnToLine);
leftLayout->addWidget(btnUnitVector);
leftGroupBox->setLayout(leftLayout);
/*********右上侧*********/
rightTopLayout=new QVBoxLayout;
rightTopLayout->addWidget(btnOperator1);
rightTopLayout->addWidget(btnOperator2);
rightTopGroupBox->setLayout(rightTopLayout);
/*********右下侧*********/
rightBottomLayout=new QVBoxLayout;
rightBottomLayout->addWidget(textEdit,0,0);
rightBottomGroupBox->setLayout(rightBottomLayout);
/*********整体*********/
QGridLayout *mainLayout=new QGridLayout(this);
mainLayout->addWidget(leftGroupBox,0,0,2,1);
mainLayout->addWidget(rightTopGroupBox,0,1);
mainLayout->addWidget(rightBottomGroupBox,1,1);
this->setLayout(mainLayout);
/*********connect函数*********/
connect(btnAngle,SIGNAL(clicked()),this,SLOT(on_pushButton_btnAngle_clicked()));
connect(btnAngleTo,SIGNAL(clicked()),this,SLOT(on_pushButton_btnAngleTo_clicked()));
connect(btnFromPolar,SIGNAL(clicked()),this,SLOT(on_pushButton_btnFromPolar_clicked()));
connect(btnIntersect,SIGNAL(clicked()),this,SLOT(on_pushButton_btnIntersect_clicked()));
connect(btnLength,SIGNAL(clicked()),this,SLOT(on_pushButton_btnLength_clicked()));
connect(btnNormalVector,SIGNAL(clicked()),this,SLOT(on_pushButton_btnNormalVector_clicked()));
connect(btnPointAt,SIGNAL(clicked()),this,SLOT(on_pushButton_btnPointAt_clicked()));
connect(btnToLine,SIGNAL(clicked()),this,SLOT(on_pushButton_btnToLine_clicked()));
connect(btnUnitVector,SIGNAL(clicked()),this,SLOT(on_pushButton_btnUnitVector_clicked()));
}
QLineFDemo::~QLineFDemo()
{
}
void QLineFDemo::on_pushButton_btnAngle_clicked()
{
DrawAngle *da=new DrawAngle;
da->show();
da->setWindowTitle(tr("函数Angle()"));
da->setGeometry(1200,400,400,300);
da->setFixedSize(800,400);
}
void QLineFDemo::on_pushButton_btnAngleTo_clicked()
{
DrawAngleTo *da=new DrawAngleTo;
da->show();
da->setWindowTitle(tr("函数AngleTo()"));
da->setGeometry(1200,400,400,300);
da->setFixedSize(800,400);
}
void QLineFDemo::on_pushButton_btnFromPolar_clicked()
{
DrawFromPolar *dfp=new DrawFromPolar;
dfp->show();
dfp->setWindowTitle(tr("函数fromPolar()"));
dfp->setGeometry(1200,400,400,300);
dfp->setFixedSize(800,400);
}
void QLineFDemo::on_pushButton_btnIntersect_clicked()
{
DrawIntersect *di=new DrawIntersect;
di->show();
di->setWindowTitle(tr("函数intersect()"));
di->setGeometry(1200,400,400,300);
di->setFixedSize(800,400);
}
void QLineFDemo::on_pushButton_btnLength_clicked()
{
DrawLength *dl=new DrawLength;
dl->show();
dl->setWindowTitle(tr("函数length()"));
dl->setGeometry(1200,400,400,300);
dl->setFixedSize(800,400);
}
void QLineFDemo::on_pushButton_btnNormalVector_clicked()
{
DrawNormalVector *dnv=new DrawNormalVector;
dnv->show();
dnv->setWindowTitle(tr("函数normalVector()"));
dnv->setGeometry(1200,400,400,300);
dnv->setFixedSize(800,400);
}
void QLineFDemo::on_pushButton_btnPointAt_clicked()
{
DrawPointAt *dpa=new DrawPointAt;
dpa->show();
dpa->setWindowTitle(tr("函数pointAt()"));
dpa->setGeometry(1200,400,400,300);
dpa->setFixedSize(80