当前位置: 首页 > news >正文

「QT」几何数据类 之 QPointF 浮点型点类

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「QT」QT5程序设计
📚全部专栏
「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合
「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发
「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明
「Math」探秘数学世界

目录

    • QPointF类详解
      • 一、引言
      • 二、使用范围
      • 三、类的头文件
      • 四、类的构造介绍
      • 五、共有函数介绍
      • 六、Static函数介绍
      • 七、运算符重载
      • 八、详细代码举例

QPointF类详解

一、引言

QPointF是Qt框架中的一个重要类,它用于表示二维平面上的浮点数坐标点。与QPoint类不同,QPointF使用浮点数(通常是qreal类型,在Qt中通常定义为doublefloat)来存储坐标,从而提供了更高的精度。这使得QPointF在处理需要高精度的图形变换和绘制时非常有用。
官方帮助文档:https://doc.qt.io/qt-5/qpointf.html

二、使用范围

QPointF类广泛应用于Qt的图形编程和界面设计中,特别是在需要高精度坐标计算的场景中。它不仅可以用于表示图形界面中的点位置,还可以作为向量进行各种数学运算。此外,QPointF类还常用于处理图形变换、动画效果以及精确绘制图形等场景。

三、类的头文件

要使用QPointF类,需要包含其头文件<QPointF>。这个头文件定义了QPointF类的所有成员和函数,使得开发者可以在自己的Qt应用程序中使用该类。

#include <QPointF>

四、类的构造介绍

QPointF类提供了两种构造函数:

  1. 默认构造函数:创建一个横纵坐标均为0.0的QPointF对象。
QPointF();
  1. 参数化构造函数:创建一个横纵坐标分别为指定浮点值的QPointF对象。
QPointF(qreal xpos, qreal ypos);

五、共有函数介绍

QPointF类提供了多个共有函数,用于获取和设置点的坐标、进行向量运算等。以下是一些常用的共有函数:

  • qreal x() const:获取点的横坐标。
  • qreal y() const:获取点的纵坐标。
  • void setX(qreal x):设置点的横坐标。
  • void setY(qreal y):设置点的纵坐标。
  • QPointF &operator+=(const QPointF &point):将当前点与另一个点相加,结果存储在当前点中。
  • QPointF &operator-=(const QPointF &point):将当前点与另一个点相减,结果存储在当前点中。
  • qreal manhattanLength() const:计算当前点作为向量时的曼哈顿长度(即横纵坐标绝对值之和)。
  • QPointF toPoint() const:将当前QPointF对象转换为QPoint对象,注意这会丢失精度。

六、Static函数介绍

QPointF类也提供了一个静态函数dotProduct,用于计算两个点的点积。

static qreal dotProduct(const QPointF &p1, const QPointF &p2);

该函数接受两个QPointF对象作为参数,并返回它们的点积结果。

七、运算符重载

QPointF类重载了多个运算符,使得该类可以像基本数据类型一样进行运算。以下是一些重载的运算符:

  • QPointF operator+(const QPointF &point):两个点相加,返回一个新的QPointF对象。
  • QPointF operator-(const QPointF &point):两个点相减,返回一个新的QPointF对象。
  • QPointF operator*(qreal factor):将点乘以一个浮点因子,返回一个新的QPointF对象。
  • QPointF operator/(qreal divisor):将点除以一个浮点因子,返回一个新的QPointF对象。
  • bool operator==(const QPointF &other):判断两个点是否相等(基于浮点数比较的容差)。
  • bool operator!=(const QPointF &other):判断两个点是否不相等。

需要注意的是,由于浮点数的精度问题,operator==operator!=的比较可能会受到一定的容差影响。在实际应用中,可能需要使用特定的比较函数或方法来处理浮点数比较的问题。

八、详细代码举例

以下是一个使用QPointF类的详细代码示例,展示了如何创建QPointF对象、获取和设置坐标、进行向量运算以及计算曼哈顿长度。

#include <QCoreApplication>
#include <QPointF>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);// 创建两个QPointF对象QPointF point1(3.5, 4.2);QPointF point2(1.1, 2.3);// 获取点的坐标qreal x1 = point1.x();qreal y1 = point1.y();qDebug() << "Point1:" << x1 << "," << y1;qreal x2 = point2.x();qreal y2 = point2.y();qDebug() << "Point2:" << x2 << "," << y2;// 设置点的坐标point1.setX(5.7);point1.setY(6.8);qDebug() << "After setting, Point1:" << point1.x() << "," << point1.y();// 向量运算QPointF point3 = point1 + point2;qDebug() << "Point1 + Point2 = Point3:" << point3.x() << "," << point3.y();QPointF point4 = point1 - point2;qDebug() << "Point1 - Point2 = Point4:" << point4.x() << "," << point4.y();QPointF point5 = point1 * 2.0;qDebug() << "Point1 * 2.0 = Point5:" << point5.x() << "," << point5.y();QPointF point6 = point1 / 1.5;qDebug() << "Point1 / 1.5 = Point6:" << point6.x() << "," << point6.y();// 计算曼哈顿长度qreal length = point1.manhattanLength();qDebug() << "Manhattan length of Point1:" << length;// 点积运算qreal dotProd = QPointF::dotProduct(point1, point2);qDebug() << "Dot product of Point1 and Point2:" << dotProd;return a.exec();
}

在这个示例中,我们首先创建了两个QPointF对象point1point2,并获取了它们的坐标。然后,我们设置了point1的新坐标,并进行了向量加法、减法、乘法和除法运算。此外,我们还计算了point1的曼哈顿长度和point1point2的点积,并将所有结果输出到控制台。

通过本文的介绍,相信读者已经对Qt中的QPointF类有了深入的了解。在实际开发中,可以根据需要灵活运用QPointF类来处理二维平面上的浮点数坐标点和向量运算。


在这里插入图片描述


http://www.mrgr.cn/news/69666.html

相关文章:

  • mmsegmentation: 安装 并使用自定义数据集进行训练 ·1
  • 解锁微前端的优秀库
  • <项目代码>YOLOv8 番茄识别<目标检测>
  • 万字长文解读深度学习——Transformer
  • 雷池waf安装并部署防护站点
  • D63【python 接口自动化学习】- python基础之数据库
  • 免费送源码:Java+springboott+MySQL+Tomcat 游戏攻略网站设计与实现 计算机毕业设计原创定制
  • 基于springboot的公益服务平台的设计与实现
  • 【论文复现】MSA+抑郁症模型总结(三)
  • 国际刑警组织在全球打击网络犯罪行动中捣毁了22000多台恶意服务器!思科为工业无线系统中的关键URWB漏洞发布补丁 | 安全周报1110
  • 人脸识别率低怎么办?如何通过代码提高准确率?
  • 第18篇 :深入剖析systemverilog中 randomize 失败案例启示录(二)
  • JavaAPI(2)
  • 关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细
  • 在.NET中正确捕获C++程序的cout输出
  • Qt_day4_Qt_UI设计
  • 互联网基础思维
  • 小白速成教程:私有化大模型+知识库
  • 深入解析Python的上下文管理器与资源管理:实现自定义的with语句
  • 简记Vue3(五)—— Pinia
  • windows定时闹钟
  • 丹摩征文活动 |丹摩智算平台:网络安全的守护与挑战
  • 胶囊网络、MobileNet、坐标注意力机制的应用
  • 【大语言模型】ACL2024论文-08 统一的时间知识图谱推理模型:插值与外推
  • 【51单片机输出50ms与200ms方波】
  • [CKS] K8S NetworkPolicy Set Up