「QT」几何数据类 之 QRectF 浮点型矩形类

在这里插入图片描述

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

目录

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

Qt中的QRectF类

一、类的引言

QRectF是Qt框架中用于描述浮点型矩形的类,它提供了多种构造函数和方法来设置和操作矩形。与QRect类不同,QRectF使用浮点数来表示矩形的坐标和尺寸,这使得它在进行精确绘图和几何计算时更为灵活和准确。QRectF类在Qt的图形视图框架、绘图、碰撞检测及图像处理等多个方面发挥着重要作用。
https://doc.qt.io/qt-5/qrectf.html

二、使用范围

  1. 绘图:在Qt中绘制图形时,使用QRectF来确定图形的位置和大小,特别是在需要高精度绘图的情况下。
  2. 图形视图框架:Qt的图形视图框架使用QRectF来描述图形项的位置和边界。
  3. 碰撞检测:在游戏开发和图形应用中,使用QRectF来判断两个物体是否相交或重叠。
  4. 图像处理:在图像处理中,使用QRectF来确定图像的区域,进行裁剪、缩放等操作。

三、类的头文件

QRectF类的头文件是<QRectF>,在使用QRectF类时,需要包含这个头文件。

#include <QRectF>

四、类的构造介绍

QRectF类提供了多种构造函数,允许通过不同的参数来创建矩形对象:

  1. QRectF(): 创建一个空矩形。
  2. QRectF(qreal x, qreal y, qreal width, qreal height): 创建一个左上角坐标为(x, y),宽度为width,高度为height的矩形。
  3. QRectF(const QPointF &topLeft, const QPointF &bottomRight): 创建一个左上角坐标为topLeft,右下角坐标为bottomRight的矩形。
  4. QRectF(const QRectF &other): 创建一个与other相同的矩形。

五、共有函数介绍

QRectF类提供了丰富的成员函数来操作矩形对象:

  1. 设置和获取位置与大小

    • setX(qreal x): 设置矩形左上角的x坐标。
    • setY(qreal y): 设置矩形左上角的y坐标。
    • setWidth(qreal width): 设置矩形的宽度。
    • setHeight(qreal height): 设置矩形的高度。
    • topLeft(): 返回矩形的左上角坐标。
    • topRight(): 返回矩形的右上角坐标。
    • bottomLeft(): 返回矩形的左下角坐标。
    • bottomRight(): 返回矩形的右下角坐标。
    • width(): 返回矩形的宽度。
    • height(): 返回矩形的高度。
  2. 移动和缩放

    • moveLeft(qreal x): 将矩形的左边界移动到x。
    • moveTop(qreal y): 将矩形的上边界移动到y。
    • moveRight(qreal x): 将矩形的右边界移动到x。
    • moveBottom(qreal y): 将矩形的下边界移动到y。
    • moveTopLeft(const QPointF &p): 将矩形的左上角移动到p。
    • moveBottomRight(const QPointF &p): 将矩形的右下角移动到p。
    • translate(qreal dx, qreal dy): 将矩形沿着x轴平移dx,沿着y轴平移dy。
    • scaled(qreal sx, qreal sy, Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio): 按比例缩放矩形。
  3. 判断与相交

    • isEmpty(): 判断矩形是否为空。
    • isValid(): 判断矩形是否有效。
    • contains(const QPointF &point): 判断点point是否在矩形内。
    • contains(const QRectF &rect): 判断矩形rect是否在矩形内。
    • intersects(const QRectF &rect): 判断矩形rect是否与矩形相交。
    • united(const QRectF &other): 返回一个包含当前矩形和other矩形的最小矩形。
    • intersected(const QRectF &other): 返回当前矩形和other矩形的交集。
  4. 其他

    • size(): 返回矩形的尺寸(宽度和高度)。
    • center(): 返回矩形的中心点。
    • normalized(): 返回一个规范化的矩形,即宽度和高度都为正数的矩形。

六、Static函数介绍

与QRect类类似,QRectF类本身并没有提供静态成员函数。静态函数的应用更多见于其他类,用于提供工具函数、单例管理等。然而,QRectF类提供了一些静态方法,这些方法不是严格意义上的静态成员函数,而是作为类的辅助函数存在,用于执行与矩形相关的计算。例如,QRectF::fromRect(const QRect &rect)可以将一个QRect对象转换为一个QRectF对象。

七、运算符重载

C++支持运算符重载,但QRectF类本身并没有重载运算符。它主要依赖于Qt框架提供的各种成员函数来进行操作。然而,Qt中的其他类如QVector、QString等,利用了运算符重载来提供更简单和自然的语法。

八、详细代码举例

以下是一个简单的代码示例,用于演示QRectF的基本用法:

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QRectF>class MyWidget : public QWidget {
public:void paintEvent(QPaintEvent *event) {Q_UNUSED(event);QPainter painter(this);// 创建一个左上角坐标为(50.0, 50.0),宽为100.0,高为100.0的矩形QRectF rect1(50.0, 50.0, 100.0, 100.0);// 创建一个左上角坐标为(150.0, 150.0),右下角坐标为(250.0, 250.0)的矩形QPointF topLeft(150.0, 150.0);QPointF bottomRight(250.0, 250.0);QRectF rect2(topLeft, bottomRight);// 将矩形rect2的左上角移动到(300.0, 300.0)rect2.moveTopLeft(QPointF(300.0, 300.0));// 将矩形rect2沿着x轴平移50.0,沿着y轴平移50.0rect2.translate(50.0, 50.0);// 绘制矩形rect1和rect2painter.setBrush(Qt::NoBrush);painter.setPen(Qt::black);painter.drawRect(rect1);painter.drawRect(rect2);// 绘制矩形rect1的中心点和rect2的边界painter.setPen(Qt::red);painter.drawEllipse(rect1.center(), 5, 5); // 绘制中心点(以红色小圆表示)painter.setPen(Qt::blue);painter.drawLine(rect2.topLeft(), rect2.bottomRight()); // 绘制对角线(以蓝色线表示)}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MyWidget widget;widget.resize(500, 500);widget.show();return app.exec();
}

运行上述代码,将看到一个窗口,其中包含两个矩形。一个是左上角坐标为(50.0, 50.0),宽为100.0,高为100.0的矩形;另一个是左上角坐标为(350.0, 350.0)(经过移动和平移后),宽为100.0,高为100.0的矩形。此外,还绘制了第一个矩形的中心点和第二个矩形的对角线,分别用红色和蓝色表示。


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/9303.html

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

相关文章

Android音频进阶之PCM设备创建(九十三)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

【TMM2024】Frequency-Guided Spatial Adaptation for Camouflaged Object Detection

论文链接&#xff1a;https://arxiv.org/abs/2409.12421 这个论文研究 Camouflaged Object Detection &#xff08;COD&#xff09;问题&#xff0c;作者认为&#xff0c;使用 pretrained foundation model 可以改进COD的准确率&#xff0c;但是当前的 adaptor 大多学习空间特…

大数据-208 数据挖掘 机器学习理论 - 岭回归 和 Lasso 算法 原理

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Spark Streaming

流处理和批处理 spark streaming底层原理 滑动窗口 window窗口操作二 过车数据案例

关于圆周率-3

最后一个问题&#xff0c;欧拉公式&#xff0c; 到底要说明的是什么。从欧拉函数的四个特殊值可以看出&#xff0c; 可见这个函数的作用是将角度映射回它原来的数值。在螺旋楼梯的例子中&#xff0c;我们用虚数单位的倍数搭建楼梯&#xff0c;并构造角度&#xff0c;角度是一系…

npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。

npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Exe cution_Policies。 所在位置 行:1 字符: 1 npm install ~~~ CategoryInf…

WPF+MVVM案例实战与特效(二十六)- 3D粒子方块波浪墙效果实现

文章目录 1、案例效果2、案例实现1、文件创建2. 功能代码实现3、粒子功能应用1、前端布局与样式2、代码解释2、 后端功能代码1、案例效果 2、案例实现 1、文件创建 打开 Wpf_Examples 项目、Models 文件夹下创建 3D粒子模型类 ParticleCubeWaveModel.cs 文件。在Tools 文件夹…

NVR设备ONVIF接入平台EasyCVR私有化部署视频平台如何安装欧拉OpenEuler 20.3 MySQL

在当今数字化时代&#xff0c;安防视频监控系统已成为保障公共安全和个人财产安全的重要工具。NVR设备ONVIF接入平台EasyCVR作为一款功能强大的智能视频监控管理平台&#xff0c;它不仅提供了视频远程监控、录像、存储与回放等基础功能&#xff0c;还涵盖了视频转码、视频快照、…

动态规划理论基础和习题【力扣】【算法学习day.26】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向&#xff08;例如想要掌握基础用法&#xff0c;该刷哪些题&#xff1f;&#xff09;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&am…

webpack 执行流程 — 实现 myWebpack

前言 实现 myWebpack 主要是为了更好的理解&#xff0c;webpack 中的工作流程&#xff0c;一切都是最简单的实现&#xff0c;不包含细节内容和边界处理&#xff0c;涉及到 ast 抽象语法树和编译代码部分&#xff0c;最好可以打印出来观察一下&#xff0c;方便后续的理解。 re…

【WRF模拟】全过程总结:WPS预处理及WRF运行

【WRF模拟】全过程总结:WPS预处理及WRF运行 1 数据准备1.1 嵌套域设置(Customize domain)-基于QGis中gis4wrf插件1.2 静态地理数据1.2.1 叶面积指数LAI和植被覆盖度Fpar(月尺度)1.2.2 地面反照率(月尺度)1.2.3 土地利用类型+不透水面积1.2.4 数据处理:geotiff→tiff(W…

详解Gemini API的使用:在国内实现大模型对话与目标检测教程

摘要&#xff1a;本博客介绍了如何利用Gemini API实现多轮对话和图像目标检测识别功能&#xff0c;在Python中快速搭建自己的大模型完成实际任务。通过详细的步骤解析&#xff0c;介绍了如何申请Gemini API密钥&#xff0c;调用API、对话实现的代码&#xff0c;给出了上传图片识…

「QT」几何数据类 之 QPoint 整型点类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

vue页签

效果&#xff1a; 快来学习&#xff1a; Vue 3 Composition API 和 script setup 语法 Composition API&#xff1a;Vue 3 引入的 Composition API 相比 Vue 2 的 Options API 提供了更灵活的代码组织方式。使用 setup 函数&#xff0c;可以将组件的所有功能和逻辑集中在一起&a…

参数高效微调

参数高效微调 参数高效微调简介 对于预训练数据涉及较少的垂直领域&#xff0c;大语言模型需要对这些领域及相应的下游任务进行适配。上下文学习和指令微调是进行下游任务适配的有效途径&#xff0c;但它们在效果或效率上存在缺陷。为弥补这些不足&#xff0c;参数高效微调&am…

第3篇 滑动开关控制LED__ARM汇编语言工程<一>

Q&#xff1a;如何设计实现滑动开关控制LED的ARM汇编程序呢&#xff1f;与Nios II汇编语言有何不同呢&#xff1f; A&#xff1a;基本原理&#xff1a;该应用程序用到DE1-SoC开发板上的10个红色LED、10个滑动开关SW和4个按钮开关。DE1-SoC_Computer system的qsys系统中IP的硬件…

Windows配置hosts文件域名本地解析IP地址,网页打开

在Windows系统中&#xff0c;配置hosts文件可以实现对域名的本地解析&#xff0c;即将特定的域名映射到指定的IP地址。以下是在Windows系统中配置hosts文件的详细步骤&#xff1a; 一、找到hosts文件位置 “C:\Windows\System32\drivers\etc” 二、备份hosts文件并打开 建议…

【主机游戏】艾尔登法环游戏攻略

艾尔登法环&#xff0c;作为一款备受好评但优化问题频发的游戏&#xff0c;就连马斯克都夸过 今天介绍一下这款游戏 https://pan.quark.cn/s/24760186ac0b 角色升级 在《艾尔登法环》中&#xff0c;角色升级需要找到梅琳娜。你可以在关卡前废墟的营地附近&#xff0c;风暴关…

网络原理(应用层)->HTTP

前言 大家好我是小帅&#xff0c;今天我们来了解应用层协议HTTP 文章目录 1. HTTP 请求响应格式&#xff08;重点&#xff09;1.1 HTTP 协议的⼯作过程1.2 HTTP请求格式1. 3HTTP响应格式 2. HTTP 请求 (Request)2.1 使⽤ ping 命令查看域名对应的 IP 地址2.2 URL encode2.3 认识…