当前位置:C++技术网 > 资讯 > Qt零基础教程:5.1 QPoint详解(1)

Qt零基础教程:5.1 QPoint详解(1)

更新时间:2015-10-26 13:59:12浏览次数:1+次

           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我们看到有如下的说明:

Header:	#include <QPoint>
qmake:	QT += core

       如果要添加这个类的话,需要在.pro文件当中添加core这个模块,相关的语句是:

QT += core

       然后添加相应的头文件

#include <QPoint>

      我曾经写过一些代码,其中.pro中没有添加core这个模块,但是依然能使用这个类,不过为了程序的稳定性,大家最好还是要添加相应的模块为好。

    这个类没有继承自别的类,所有的成员函数都在下面:

	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的源码进行分析