Qt基础类01--坐标类QPoint

基本信息

时间:2024.08.27
QT版本:5.14.2
平台:window 10

程序简介:
1.本工程是Qt基础类和基本数据类型专题例程,QPoint坐标类
2.本工程对照着Qt的帮助文档,把每个属性和成员函数测试了一遍
3.本工程,为学习Qt的其它类,其它帮助文档中的内容,留下一个模版

程序说明:
1.打印每个成员函数的帮助信息
2.每个按钮,验证一个成员函数
3.pro文件,添置CONFIG += console,输出重定向到控制台
4.toCGPoint、QDataStream,这2项相关,暂未测试验证

QPoint类帮助中的2种操作符重载

在查阅QPoint类的帮助文档中,注意到,同样的操作符重载,有2种,一种是返回的引用,一种是返回的副本。
这也是我在查阅完文档之后,决定把测试程序的按钮把引用和副本标出来的原因,否则不必这么麻烦。
关于标准C++的操作符重载,不是这里的重点,不过多赘述,请参考其它资料。
操作符重载,最通俗易懂的理解,就是“可以将类对象像基本数据类型一样,进行+ - * / 的运算”。
举例:

int a=1;
intb=2;
//这里的+的2个操作数是int类型的
int sum=a+b;

加法操作符重载之后,可以进行类对象的加法,举例如下:

Object obj1;
Object obj2;
Object objSum;
//这里的+的2个操作数不是基本数据类型,是类对象
objSum=obj1+obj2;

Qt的帮助文档中,关于加法操作符的重载,有如下2段,请注意看!
第1段,这里返回的是引用

QPoint &QPoint::operator+=(const QPoint &point)
Adds the given point to this point and returns a reference to this point. For example:
将给定点添加到此点,并返回对此点的引用。例如:
QPointp( 3, 7);
QPoint q(-1, 4);
p += q; // p becomes (2, 11)
See also operator-=().

第2段,这里返回的是副本,即对象,即复制了一个对象,这是要开辟内存,占用内存的。

const QPointoperator+(const QPoint&p1, const QPoint&p2)
Returns a QPointobject that is the sum of the given points, p1 and p2; each component is added separately.
返回一个QPoint对象,它是给定点p1和p2的总和;每个组件都是单独添加的。
See also QPoint::operator+=().

【题外话】
这里不吐不快。非常感谢年轻时遭受的白眼与轻蔑,没有这些,想必前进的动力也会少了很多。
记得我刚毕业的时候,刚踏入社会走向工作时,曾经在闲聊时,向项目合作中来自上海的2个同事,请教关于内存的重要性,问了句“为什么行业内的前辈都在强调内存的重要性,网上写文章都说,调试的时候要注意看内存,内存怎么看啊?”
这2个来自上海的同事,一男一女,男的是博士,女的是老板的关系户,这2个人都摇头和我说“不知道,不会”。
我当时一脸疑惑,不能吧~!他们工作这么多年,怎么可能不会啊!这水平也一般般啊!

现在回再回想起来,人家怎么可能是水平一般般,怎么可能是不会,只不过,当前的我,还不具备和人家对话的能力和条件罢了,就算人家花时候给我讲一讲,我大概率也听不懂,胡乱还会再问一堆问题,人家就算花时间给我讲了,我可能还是一知半解。人家只不过是没必要给我讲罢了。

还好,本人比较有自知知明,没有过多打扰。这些年,这个瞬间也没有忘记。也激励自己不断的学习、积累、前进、提高。

重要成员函数举例6个

这里,最基本的获取坐标,point.x()和point.y()等,rx(),ry()等不再详细介绍、不再贴代码了。
工程上传至CSDN,供同一时期学习QT的网友参考,可自行查看。
这里仅介绍新手小白可能值得一看的内容贴出来。

程序全貌

这个练习程序,是对照着QT中QPoint的帮助文档,一个一个测试形成的。全貌如下图:
在这里插入图片描述

bool QPoint::isNull() const

程序运行效果如下:

    qDebug()<<"帮助:如果x和y坐标都设置为0,则返回true,否则返回false。";

    QPoint p1(0,0);
    QPoint p2(300,200);

    qDebug()<<"p1的原坐标是:"<<p1.x()<<","<<p1.y();
    qDebug()<<"p2的原坐标是:"<<p2.x()<<","<<p2.y();

    bool result1=p1.isNull();
    bool result2=p2.isNull();

    qDebug()<<"经过bool result1=p1.isNull();运算";
    qDebug()<<"经过bool result2=p2.isNull();运算";

    qDebug()<<"result1的结果是:"<<result1;
    qDebug()<<"result2的结果是:"<<result2;

    qDebug()<<"";
    qDebug()<<"";

在这里插入图片描述

int QPoint::manhattanLength() const

    qDebug();
    qDebug()<<"帮助:返回x()和y()的绝对值之和,传统上称为向量从原点到点的“曼哈顿长度”。";

    QPoint p(30,40);
    qDebug()<<"p的坐标是:"<<p.x()<<","<<p.y();

    //以下语句需要<QMath>的支持
    double trueLength = std::sqrt(std::pow(p.x(), 2) + std::pow(p.y() , 2));

    qDebug()<<"经过double trueLength = std::sqrt(std::pow(p.x(), 2) + std::pow(p.y() , 2));运算";
    qDebug()<<"p点与原点的真实长度是:"<<trueLength;
    qDebug()<<"p点的曼哈顿长度是:"<<p.manhattanLength();

程序运行效果如下:
在这里插入图片描述

QPoint &QPoint::operator*=(float factor)

    QPoint p1(10,10);

    qDebug()<<"";
    qDebug()<<"帮助:将该点的坐标乘以给定因子,并返回对该点的引用。";
    qDebug()<<"p1的老坐标是:"<<p1.x()<<","<<p1.y();

    float pi=3.142;
    //p1*=pi;
    p1.operator*=(pi);
    qDebug()<<"经过p1.operator*=(pi);乘法操作符重载运算";

    qDebug()<<"p1的新坐标是:"<<p1.x()<<","<<p1.y()<<"";
    qDebug()<<"注意QPoint坐标类,乘法运算符重载时产生的四舍五入问题,必要时使用QPointF";
    qDebug()<<"";
    qDebug()<<"";

程序运行效果如下:
在这里插入图片描述

QPoint &QPoint::operator/=(qreal divisor)

    QPoint p1(100,100);
    QPoint p2(200,200);

    qDebug()<<"帮助:这是一个重载函数。将x和y除以给定的除数,并返回对此点的引用。";
    qDebug()<<"p1的老坐标是:"<<p1.x()<<","<<p1.y();
    qDebug()<<"p2的老坐标是:"<<p2.x()<<","<<p2.y();

    //p1/=10;
    //p2/=3;

    qreal r1=10;
    qreal r2=3;

    p1=p1.operator/=(r1);
    p2/=r2;

    qDebug()<<"经过p1=p1.operator/=(r1);除法操作符重载运算";
    qDebug()<<"经过p2/=r2;;除法操作符重载运算";

    qDebug()<<"p1的新坐标是:"<<p1.x()<<","<<p1.y();
    qDebug()<<"p2的新坐标是:"<<p2.x()<<","<<p2.y();

    qDebug()<<"注意QPoint类,除法运算符重载的四舍五入问题,必要时使用QPointF";
    qDebug()<<"";
    qDebug()<<"";

程序运行效果如下:
在这里插入图片描述

const QPoint operator+(const QPoint &point)

    qDebug()<<"";
    qDebug()<<"帮助:返回未修改的点。返回的是const QPoint类型的对象。这个函数是在Qt 5.0中引入的。";
    QPoint p(100,100);

    qDebug()<<"p的坐标是:"<<p.x()<<","<<p.y();

    QPoint q;
    q=operator+(p);

    qDebug()<<"经过q=operator+(p);加法操作符重载";

    qDebug()<<"q的坐标是:"<<q.x()<<","<<q.y()<<"";
    qDebug()<<"";
    qDebug()<<"";

程序运行效果如下:
在这里插入图片描述

本文后续

1.本篇博文,关联QPointF,准备着手再测试验证一下QPointF
2.本篇博文,关联标准C++的操作符重载,看时间情况吧~!如果时间允许,近期再整理一下C++的操作符重载

2024.08.28
于家中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值