「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.mzph.cn/pingmian/59755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动手学深度学习-使用d2l导致jupyter内核挂掉

参考如何解决Jupyter Notebook当中有关内核挂掉的问题_挂掉的内核-CSDN博客 在使用d2l库之前加入 import os os.environ["KMP_DUPLICATE_LIB_OK"]"TRUE"

阿里云centos7.9服务器磁盘挂载,切换服务路径

项目背景 1、项目使用的服务器为阿里云centos7.9&#xff0c;默认的磁盘为vda&#xff0c;文件系统挂载在这个磁盘上&#xff0c;项目上使用的文件夹为/home/hnst/uploadPath 2、vda使用率已达到91% 3、现购置一块新的磁盘为vdb&#xff0c;大小为2T 目的 切换服务所使用的…

uni-app 封装刘海状态栏(适用小程序, h5, 头条小程序)

一. 创建一个hooks hooks—>useSystemBar.js 二. useSystemBar.js 其中// #ifdef MP-WEIXIN 不是注释 这是uni-app的写法 import {ref} from vue;export default function() {// 获取系统信息let systemInfo ;// #ifdef MP-WEIXINsystemInfo uni.getWindowInfo…

每日科技资讯:2024年11月09日【龙】农历十月初九 ---文末送书

目录 1.史上最强游戏CPU&#xff01;9800X3D首发评测2.苹果喊话iPhone 13和14钉子户&#xff1a;16方方面面都升级了3.加拿大政府下令 TikTok 关闭该国业务&#xff0c;但应用仍可以继续访问4.OpenAI 刚刚花了超过 1000 万美元购买了Chat.com5.Max 加入打击密码共享行列6.微软可…

探索深度学习的本质

深度学习的本质是利用多层&#xff08;深层&#xff09;的神经网络结构来从数据中学习复杂的模式和特征。其主要特点是具有层次结构&#xff0c;能够实现自动特征提取。非线性、可扩展性和迁移学习能力是深度学习能够处理复杂问题和广泛&#xff08;低成本&#xff09;应用的关…

vue3 + vite引入地址路径报错,以及无法点击跳转相应的文件

vue3 vite引入地址路径报错&#xff0c;以及无法点击跳转相应的文件 在项目中找到tsconfig.json&#xff0c;或者jsconfig.json 文件&#xff0c;使用一下代码替换即可。如果两个文件都不存在&#xff0c;如果项目使用了ts&#xff0c;就创建tsconfig.json文件&#xff0c;复…

API接口:助力汽车管理与安全应用

随着汽车行业的飞速发展&#xff0c;越来越多的汽车管理技术被应用到交通安全和智慧交通系统中。在这一过程中&#xff0c;API接口起到了至关重要的作用。通过API接口&#xff0c;我们可以实现诸如车主身份验核、车辆信息查询等功能&#xff0c;从而为汽车智慧交通发展与安全应…

TikTok本土店vs跨境店:解读TikTok小店差异

TikTok小店的两种主要的店铺类型&#xff1a;本土店和跨境店&#xff0c;虽然这两种店铺在功能上有相似之处&#xff0c;但它们在运营模式、市场定位、目标受众和面临的挑战等方面存在显著的区别。 一、定义与基本特征 1. TikTok本土店 本土店指的是在特定国家或地区内经营的…

[libos源码学习 1] Liboc协程生产者消费者举例

文章目录 1. CoRoutineEnv_t结构体用于管理协程环境 3 Liboc协程生产者消费者例子4 Liboc协程生产者消费者&#xff0c; 为什么队列不需要上锁&#xff1f;5. 两个协程访问资源不需要加队列吗5. 参考 1. CoRoutineEnv_t结构体用于管理协程环境 struct stCoRoutineEnv_t { stCo…

【leetcode】动态规划刷题总结-划分问题

判定能否划分 一般定义dp[i]表示nums[:i 1]能否划分&#xff0c;然后枚举最后一个子数组的左端点&#xff0c;得到nums[:i 1]能否划分 LeetCode2369题 检查数组是否存在有效划分 class Solution:def validPartition(self, nums: List[int]) -> bool:if len(nums) 2:re…

[含文档+PPT+源码等]精品基于springboot实现的原生Andriod广告播放系统

基于Spring Boot实现的原生Android广告播放系统背景&#xff0c;主要可以从以下几个方面进行阐述&#xff1a; 一、市场需求与背景 移动互联网的快速发展&#xff1a; 随着移动互联网技术的不断进步&#xff0c;智能手机已成为人们日常生活中不可或缺的一部分。人们越来越多地…

【汇编语言】[BX]和loop指令(四)—— 汇编语言中的段前缀与内存保护:原理与应用解析

文章目录 前言1. 段前缀1.1 示例演示1.2 总结 2. 一段安全的空间2.1 存在的问题2.2 示例演示2.2.1 编译、链接、加载程序2.2.2 运行程序 2.3 总结 3. 段前缀的使用3.1 问题引入3.2 分析问题3.3 代码实现3.4 程序的改进3.4.1 分析3.4.2 代码实现 结语 前言 &#x1f4cc; 汇编语…

经典双指针--合并升序链表

#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h>typedef struct Node {int data;struct Node* next; } Node;Node* newNode(int data);/* 请完成下面的函数 */ Node* mergeList(Node* L1, Node* L2) {Node* head n…

Python代码主要实现了一个基于Transformer和LSTM的混合模型,用于对给定数据集进行二分类任务

Python代码主要实现了一个基于Transformer和LSTM的混合模型,用于对给定数据集进行二分类任务。代码的大致流程包括数据读取、数据预处理、模型构建、模型训练与评估以及结果输出。 #!/usr/bin/env python # coding: utf-8# In[4]:import numpy as np import pandas as pd imp…

dell服务器安装ESXI8

1.下载镜像在官网 2.打开ipmi&#xff08;idrac&#xff09;&#xff0c;将esxi镜像挂载&#xff0c;然后服务器开机 3.进入bios设置cpu虚拟化开启&#xff0c;进入boot设置启动选项为映像方式 4..进入安装引导界面3.加载完配置进入安装 系统提示点击继 5.选择安装磁盘进行…

【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦

更改name的文本数量限制大小&#xff0c; 其他我们只在name中进行操作 【除了低级可以在message中进行操作】 一、低级low <script>alert("假客套")</script> 二、中级middle 过滤了小写&#xff0c;咱们可以大写 <Script>alert("假客套…

基于Python的自然语言处理系列(57):使用最佳表示向量法实现整本书的高效摘要

在自然语言处理中,处理大型文档,如书籍或长篇文本,总结其关键内容是一项挑战。面对长达数万或数十万字的书籍时,我们往往需要找到一种既能代表书籍主旨,又能降低处理成本的方法。本篇博文介绍了一种称为“最佳表示向量法”(Best Representation Vectors)的技术,通过向量…

从0开始学习机器学习--Day19--学习曲线

一般来说&#xff0c;如果一个算法的表现不理想&#xff0c;那么多半是因为出现了欠拟合或过拟合问题&#xff0c;这种时候我们要做的就是搞清楚出现的是偏差问题还是方差问题&#xff0c;亦或是二者皆有&#xff0c;这有助于我们精准定位问题所在。 之前&#xff0c;我们发现…

大牛直播SDK如何实现Android平台多路RTSP播放?

技术背景 好多开发者&#xff0c;希望能在Android平台实现多路RTSP播放&#xff0c;从而达到集中监控的目的&#xff0c;以下是使用大牛直播 SDK 在 Android 平台上实现 RTSP 多路播放的一般步骤&#xff1a; 初始化 SDK 在项目的build.gradle文件中添加大牛直播 SDK 的依赖。…

在研究中经常使用的数据可视化工具并进行分析

引言 在现代研究中&#xff0c;数据的复杂性不断增加&#xff0c;然而&#xff0c;通过数据可视化工具&#xff0c;研究人员能够将纷繁的数据转化为直观的图形&#xff0c;提供清晰的洞察&#xff0c;以便更好地解读数据和作出决策。选择合适的数据可视化工具不仅能提高工作效…