「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.xdnf.cn/news/10212.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

青藤深度参编的终端安全国家标准正式发布

近日&#xff0c;国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告&#xff0c;由TC260&#xff08;全国网络安全标准化技术委员会&#xff09;归口&#xff0c;公安部第三研究所牵头的GB/T 29240-2024《网络安全技术 终端计算机通用安全技术规范》&…

[极客大挑战 2019]Secret File 1

[极客大挑战 2019]Secret File 1 审题 看到题目应该是一道简单的按照要求找flag的题目 知识点 跟着题目走 解题 一&#xff0c;查看源码 找到网站进入 点开发现 【注意它说没看清吗】 二&#xff0c;使用BP抓包试试 发现新出现了/action.php 抓到后放到Repeater中响应 得…

Day41 | 动态规划 :完全背包应用 完全平方数单词拆分(类比爬楼梯)

Day41 | 动态规划 &#xff1a;完全背包应用 完全平方数&&单词拆分&#xff08;类比爬楼梯&#xff09; 动态规划应该如何学习&#xff1f;-CSDN博客 01背包模板 | 学习总结-CSDN博客 完全背包模板总结-CSDN博客 难点&#xff1a; 代码都不难写&#xff0c;如何想…

ELK-Kibana配置

文章目录 一、什么是Kibana、有什么用&#xff1f;二、Kibana的安装与基本配置1. 下载Kibana安装包2. 解压安装包3. 修改Kibana配置文件4. 添加用户目录权限5. 启动Kibana6. 访问Kibana 三、Kibana的使用Index pattern的配置查看收集到的数据画图 一、什么是Kibana、有什么用&a…

kdump 应该怎么安装 linux-crashdump kdump-tools

sudo apt install linux-crashdump sudo apt install crash sudo apt install kdump-tools 1. 两个工具的关系 linux-crashdump kdump-tools 在 Ubuntu 上安装 kdump 功能&#xff0c;这两个包都是相关的&#xff0c;但有不同的作用. linux-crashdump 是一个元包&#xff08;…

pdf转excel;pdf中表格提取

一、问题描述 在工作中或多或少会遇到&#xff1a;需要将某份pdf中的表格数据提取出来&#xff0c;以便能够“修改使用”数据 可将pdf中的表格提取出来&#xff0c;解决办法还有点复杂 尤其涉及“pdf中表格不是标准的单元格”的时候&#xff0c;提取数据到excel不太容易 比…

ElasticSearch备考 -- 集群配置常见问题

一、集群开启xpack安全配置后无法启动 在配置文件中增加 xpack.security.enabled: true 后无法启动&#xff0c;日志中提示如下 Transport SSL must be enabled if security is enabled. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security b…

qt配合映美精取图开发

最近开发一个项目&#xff0c;用映美精相机配合halcon做取图开发&#xff0c;由于网上资料小特意写个记录。到映美精官网下载驱动&#xff0c;映美精官网&#xff0c;下载映美精的工具开发包SDK 映美精的SDK下载SDK后找到classlib文件夹 里面就是SDK新建一个qt程序&#xff0c…

springboot yml文件数据源出现警告/报黄/数据库配置警告问题

1、看一下数据源的依赖是不是都引入完整了 2、看一下数据源是否有拼写错误 上图就是数据源拼写错误

手机上用什么方法可以切换ip

手机上用什么方法可以切换IP&#xff1f;在某些特定情境下&#xff0c;用户可能需要切换手机的IP地址&#xff0c;以满足网络安全、隐私保护或绕过地域限制等需求。下面以华为手机为例&#xff0c;将详细介绍手机IP地址切换的几种方法&#xff0c;帮助用户轻松实现这一目标。 一…

python可视化将多张图整合到一起(画布)

这周有点事忙着&#xff0c;没时间重温刚结束的Mathurcup数学建模&#xff0c;这两天也是再看了下&#xff0c;论文还是赶紧挺烂的&#xff0c;但比国赛又有进步&#xff08;说起国赛又不得不抱怨了&#xff0c;基本其余省份都发了&#xff0c;但江西......哎&#xff09;。哎&…

vue2,vue3,uniapp,小程序实现前端url生成二维码

最近遇到一个项目&#xff0c;api返回url地址&#xff0c;前端通过地址生成二维码。 话不多说直接上代码&#xff0c;亲测有效&#xff0c;希望能帮助大家&#xff0c;同时如果有更好的方法希望大家能够分享 1、第一步&#xff0c;在项目的utils文件夹下面创建一个weapp-qrco…

【韩老师零基础30天学会Java】01章

什么是程序&#xff1f; JavaEE企业版 示例1 public class Test{public static void main(String[] args){int res11;System.out.println("result"res);}}D:\Java\code>javac Test.javaD:\Java\code>java Test 缁撴灉2D:\Java\code>javac Test.javaD:\Java…

华为交换机实现不同VLAN内的互通配置(汇聚层设备作为网关)

背景如下&#xff1a; 如下图所示&#xff0c;PC1和PC2分别属于VLAN 2和VLAN 3&#xff0c;通过接入层设备DeviceB接入汇聚层设备DeviceA。PC3属于VLAN 4&#xff0c;通过接入层设备DeviceC接入汇聚层设备DeviceA。DeviceC不做任何配置&#xff0c;当做HUB即插即用。汇聚层设备…

SpringBoot旅游酒店系统源码免费分享+本地部署及介绍 - 幽络源

初步介绍 这是一套基于SpringBoot的旅游酒店系统&#xff0c;含有前台和后台&#xff0c;需要注意的是图片文件是存放于target中的&#xff0c;因此不建议删除这个临时目录。 原文及源码获取链接 > SpringBoot旅游酒店管理系统免费分享-幽络源 所需环境 JDK1.8、Maven、…

Java开发中的分布式锁使用教程

1. 基于ZooKeeper的分布式锁 1.1 引入依赖 在项目的pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>latest</version> </dep…

zynq pl设计中断问题

问题 逻辑工程师vivado工具生成的pl hdf文件后,通过xilinx的工具解析的的dts文件,会出现中断号异常的问题。 原始问题肯定是硬件表现为通讯异常,此处以网口为例,则网口不通。 网口查询 uboot下网口信息 如下命令查询到 两个mac下对应的phy,地址分别为4和6,和硬件设计一…

Scala 的包及其导入

Scala使用包来创建用于模块化程序的命名空间。通过在Scala文件的顶部声明一个或多个包名称可以创建包&#xff0c;另一种声明包的方式是使用0&#xff0c;这种方式可以嵌套包&#xff0c;并且提供更好的范围与封装控制。对于包的导入&#xff0c;Scala与Java的区别之一便是&…

【MySQL】关于MySQL启动后mysqld_safe和mysqld进程

在mysql服务器启动后&#xff0c;有2个进程mysqld_safe和mysqld,这是为啥&#xff1f; # ps -ef | grep mysqld root 6488 3324 0 Sep03 pts/0 00:00:00 /bin/sh /mysqlsoft/mysql/bin/mysqld_safe --defaults-file/etc/my.cnf --usermysql mysql 7327 6488 0 Sep03 pts/0 0…

Rust @绑定(Rust@绑定)(在模式匹配的同时将值绑定到变量)

文章目录 Rust中的绑定基础概念示例&#xff1a;基本模式匹配 绑定的使用示例&#xff1a;范围匹配并绑定变量 深入探索绑定的好处示例&#xff1a;复杂数据结构中的应用 总结 附加 Rust中的绑定 Rust 语言以其强类型系统和内存安全的特性著称。在进行模式匹配时&#xff0c;R…