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

ops/2024/11/13 3:23:49/

在这里插入图片描述

✨博客主页
何曾参静谧的博客
📌文章专栏
「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.ppmy.cn/ops/132553.html

相关文章

【Linux】linux编辑器-vim的命令及配置

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

matlab生成m序列(数字图像水印相关)

m序列 定义 m序列是一种重要的伪随机序列&#xff08;PN序列&#xff09;&#xff0c;它是由线性反馈移位寄存器产生的周期最长的序列&#xff0c;其规律性强&#xff0c;有很好的自相关性和较好的互相关特性。 周期由什么决定&#xff1f; 既然m序列是周期最长的序列&…

[vulnhub] DarkHole: 2

https://www.vulnhub.com/entry/darkhole-2,740/ 端口扫描主机发现 探测存活主机&#xff0c;185是靶机 # nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-08 18:02 CST Nmap scan report for 192.168.75.1 Host is up (0.…

数学基础 -- 线性代数之线性无关

线性无关 在线性代数中&#xff0c;线性无关列指的是矩阵中的列向量之间不满足线性组合关系&#xff0c;即无法通过其他列向量的线性组合来表示某一个列向量。简单地说&#xff0c;一组向量是线性无关的&#xff0c;意味着其中任何一个向量不能由其他向量生成。 1. 线性无关的…

让测试用例更有价值的方法

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 本文将从更高一层的维度来讨论测试用例如何能够帮助测试人员进行更好的测试&#xff0c;提升测试用例的价值。 所有测试用例编写的前提&#xff0c;是测试人…

[ DOS 命令基础 2 ] DOS 命令详解-网络相关命令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

EHOME视频平台EasyCVR视频融合平台支持哪些摄像机接入?监控摄像头镜头的种类有哪些?

在现代安防监控领域&#xff0c;视频融合平台扮演着至关重要的角色&#xff0c;它们不仅能够整合不同品牌和型号的摄像机&#xff0c;还能提供稳定可靠的视频流传输和高效的视频管理功能。EasyCVR视频融合平台以其卓越的兼容性和灵活性&#xff0c;逐渐成为构建复杂监控网络的首…

软件测试:测试用例详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置…