QPoint类定义了平面上的一个点,这个点的参数都是整数类型的,不是浮点类型的,如果想要浮点类型的话,相应的类是QPointF。
下面就是Qt中对QPoint中定义的源码:
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Core)
class Q_CORE_EXPORT QPoint
{
public:
QPoint();
QPoint(int xpos, int ypos);
bool isNull() const;
int x() const;
int y() const;
void setX(int x);
void setY(int y);
int manhattanLength() const;
int &rx();
int &ry();
QPoint &operator+=(const QPoint &p);
QPoint &operator-=(const QPoint &p);
QPoint &operator*=(float c);
QPoint &operator*=(double c);
QPoint &operator*=(int c);
QPoint &operator/=(qreal c);
friend inline bool operator==(const QPoint &, const QPoint &);
friend inline bool operator!=(const QPoint &, const QPoint &);
friend inline const QPoint operator+(const QPoint &, const QPoint &);
friend inline const QPoint operator-(const QPoint &, const QPoint &);
friend inline const QPoint operator*(const QPoint &, float);
friend inline const QPoint operator*(float, const QPoint &);
friend inline const QPoint operator*(const QPoint &, double);
friend inline const QPoint operator*(double, const QPoint &);
friend inline const QPoint operator*(const QPoint &, int);
friend inline const QPoint operator*(int, const QPoint &);
friend inline const QPoint operator-(const QPoint &);
friend inline const QPoint operator/(const QPoint &, qreal);
private:
friend class QTransform;
// ### Qt 5; remove the ifdef and just have the same order on all platforms.
#if defined(Q_OS_MAC) && !defined(Q_OS_IOS)
int yp;
int xp;
#else
int xp;
int yp;
#endif
};
静态函数,这个函数在我下载的源码当中是没有的,但是在Qt Creator中的头文件中是有的,也就是说Qt公司对外公布的源码和实际上用的源码是由一些出入的,但是在头文件中Qt公司已经把这个函数的定义内容给我们了。
Q_DECL_CONSTEXPR static inline int dotProduct(const QPoint &p1, const QPoint &p2)
{ return p1.xp * p2.xp + p1.yp * p2.yp; }
这里我们先对QPoint的头文件进行剖析,随后对QPoint的函数的定义内容进行剖析。
从Qt的帮助中检索QPoint我们看到有如下的说明:
如果要添加这个类的话,需要在.pro文件当中添加core这个模块,相关的语句是:
然后添加相应的头文件
我曾经写过一些代码,其中.pro中没有添加core这个模块,但是依然能使用这个类,不过为了程序的稳定性,大家最好还是要添加相应的模块为好。
这个类没有继承自别的类,所有的成员函数都在下面:
Header: #include <QPoint>
qmake: QT += core
QT += core
#include <QPoint>
QPoint()
QPoint(int xpos, int ypos)
bool isNull() const
int manhattanLength() const
int & rx()
int & ry()
void setX(int x)
void setY(int y)
int x() const
int y() const
QPoint & operator*=(float factor)
QPoint & operator*=(double factor)
QPoint & operator*=(int factor)
QPoint & operator+=(const QPoint & point)
QPoint & operator-=(const QPoint & point)
QPoint & operator/=(qreal divisor)
QPoint这个类里面自己的非静态的函数一共是16个。
有一个静态成员函数:
int dotProduct(const QPoint & p1, const QPoint & p2)
这个静态函数是返回的两点之间的距离,这里就是欧式距离,没有用曼哈顿算法秋求的那个距离。这样QPoint这个类里面一共定了17个函数,其中也包括自己的构造函数。
下面的是和QPoint相关的一些函数,这些函数是对运算法进行了重载,保证了这些运算法对QPoint类的变量可以进行操作,这些函数都是QPoint的友元函数。
bool operator!=(const QPoint & p1, const QPoint & p2)
const QPoint operator*(const QPoint & point, float factor)
const QPoint operator*(const QPoint & point, double factor)
const QPoint operator*(const QPoint & point, int factor)
const QPoint operator*(float factor, const QPoint & point)
const QPoint operator*(double factor, const QPoint & point)
const QPoint operator*(int factor, const QPoint & point)
const QPoint operator+(const QPoint & p1, const QPoint & p2)
const QPoint operator+(const QPoint & point)
const QPoint operator-(const QPoint & p1, const QPoint & p2)
const QPoint operator-(const QPoint & point)
const QPoint operator/(const QPoint & point, qreal divisor)
QDataStream & operator<<(QDataStream & stream, const QPoint & point)
bool operator==(const QPoint & p1, const QPoint & p2)
QDataStream & operator>>(QDataStream & stream, QPoint & point)
下一篇开始我们就对QPoint的源码进行分析