Qt零基础教程(五) QPoint详解(2)
本文是承接上一篇对QPoint的介绍,这里着重的介绍了QPoint类的定义和QPoint类的各个函数的实现
详细描述
下面我们就开始详细的表述这个类,与此同时会结合这个类的源码进行相关的解释。
QPoint类的主要功能是定义了平面上的一个点的坐标。
一个点的坐标值由一个x坐标和一个y坐标确定,x和y的坐标值可以通过函数x()和y()来获得。后面我们会讲解相关的函数的实现,并学习一下商业软件的这些类是如何写的。
下面我们就来详细的分析这个类:
首先我们先要看看这个类的变量有哪些,然后再分析这个类对这些变量的相关的操作函数:
通过上段的代码我们发现,在Qt5.0之后都有xp和yp这两个属性,这连个属性就表示了在我们平面的坐标,当然这个坐标是二维坐标。这连个坐标值得变量类型都是int类型的,int型的变量是4个字节32位的,它的取值范围是最小值(-2147483648),最大值(2147483647)。这两个值都是十亿级别的。一般情况下的数据都是可以表示的。
这个类一共有16个成员函数:
其中有两个构造函数:
下面我们看看构造函数
QPoint()
QPoint(int xpos, int ypos)
我们看看这连个函数在头文件中是怎么定义的:
我们先分析第一个成员函数,这个函数在我们声明一个QPoint的对象的时候调用,而且在声明对象的时候没有给里面的x坐标和y坐标赋值。然后我们看看这两个成员函数的内部实现:
我们看到第一个构造函数没有参数传入进来,但是在构造函数里面给了xp和yp都进行类赋零操作,第二个构造函数里面是有参数传入进来的,xp和yp就是传入值得坐标。
有6个函数是和属性xp和yp有关的。
int & rx()
int & ry()
void setX(int x)
void setY(int y)
int x() const
int y() const
我们先看一下
void setX(int x)
void setY(int y)
这两个 函数,我们可以通过setX()和setY()来设置xp和yp的大小。首先看一下函数的声明:
然后看一下函数的内部实现代码:
通过内部的代码我们发现,setX()和setY()就是用来实现对xp和yp的赋值操作的。
下面我们来看一下
int & rx()
int & ry()
和
int x() const
int y() const
的异同点。
先看看他们的声明和实现:
坐标可以通过函数x()和y()来访问,也可以通过rx()由ry()来方位,但是不可以通过x()和y()这两个函数值来改变xp和yp的大小,却可以通过rx()和ry()来改变xp和yp的大小。因为rx()和ry()的返回值时xp和yp的引用,相当于xp和yp的指针。
下面还有连个函数:
bool isNull() const
int manhattanLength() const
isNull ()这个函数用来确定xp和yp的值是否全都是零。
如果全都是零的话就会返回true,如果不是全零的话,那么就是返回的是false.
int QPoint::manhattanLength () const
返回x()和y()的绝对值得和,就是传统上的从原点开始的矢量的“曼哈顿长度”。这个传统的出现是因为这样的距离适用于在矩形方格上旅行的履行者们,就像曼哈顿的街道一样。
这个很有用的,并且运算很快,和真实长度sqrt(pow(x(),2)+pow(y(),2))很接近。