PySide6 GUI 学习笔记——常用类及控件使用方法(常用类矩阵QRectF)

文章目录

  • 类描述
  • 构造方法
  • 主要方法
    • 1. 基础属性
    • 2. 边界操作
    • 3. 几何运算
    • 4. 坐标调整
    • 5. 转换方法
    • 6. 状态判断
  • 类特点总结
    • 1. 浮点精度:
    • 2. 坐标系统:
    • 3. 有效性判断:
    • 4. 几何运算:
    • 5. 类型转换:
    • 6. 特殊处理:
  • 典型应用场景
    • 1. 图形碰撞检测:
    • 2. 动态布局调整:
    • 3. 高精度绘图:
    • 4. 动画路径计算:
  • 注意事项
    • 1. 坐标系差异:
    • 2. 精度转换:
    • 3. 性能优化:
    • 4. 异常处理:
    • 5. 边界情况:
  • 附:与QRect核心区别

类描述

QRectF类使用浮点精度定义平面上的矩形,继承自Shiboken.Object。用于图形界面开发中高精度矩形区域操作。
QRectF

构造方法

# 通过坐标构造
rect1 = QRectF(100.0, 200.0, 50.5, 30.2)    # QRectF(float x, float y, float w, float h)
print(rect1)    # QRectF(100.0,200.0,50.5,30.2)
# 通过QPointF和QSizeF构造
top_left = QPointF(100.0, 200.0)
size = QSizeF(50.5, 30.2)
rect2 = QRectF(top_left, size)  # QRectF(QPointF topLeft, QSizeF size)
print(rect2)    # QRectF(100.0,200.0,50.5,30.2)# 从QRect转换
qrect = QRect(100, 200, 50, 30)
rect3 = QRectF(qrect)   # QRectF(QRect rect)
print(rect3)    # QRectF(100.0,200.0,50.0,30.0)

主要方法

1. 基础属性

print(rect1.x())        # 左边缘x坐标 (100.0)
print(rect1.y())        # 上边缘y坐标 (200.0)
print(rect1.width())    # 宽度 (50.5)
print(rect1.height())   # 高度 (30.2)
print(rect1.center())   # 中心点 QPointF(125.25, 215.1)

2. 边界操作

rect = QRectF(100, 200, 50, 30)
rect.setLeft(110)       # 调整左边界,宽度变为40.0
print(rect)             # QRectF(110.0, 200.0, 40.0, 30.0)
rect.moveBottom(250)    # 保持高度,移动到底部到y=250
print(rect)             # QRectF(110.0, 220.0, 40.0, 30.0)
print(rect.bottomRight()) # 右下角 QPointF(150.0, 250.0)  

3. 几何运算

rectA = QRectF(0, 0, 100, 100)
rectB = QRectF(50, 50, 100, 100)# 交集
intersection = rectA.intersected(rectB)  # QRectF(50,50,50,50)
print(intersection)      # 并集
united = rectA.united(rectB)            # QRectF(0,0,150,150)
print(united)          # 包含检测
print(rectA.contains(QPointF(30, 30)))  # True
print(rectA.intersects(rectB))          # True

4. 坐标调整

rect = QRectF(100, 200, 50.5, 30.2)
# 相对调整
new_rect = rect.adjusted(10, 5, -20, -10)
# 原rect (100,200,50.5,30.2)
# 新矩形 (110,205,20.5,15.2)
print(new_rect)      # QRectF(110.0,205.0,20.5,15.2)# 绝对设置
rect.setCoords(110, 205, 130.5, 220.2)
print(rect)          # QRectF(110.0,205.0,20.5,15.2)

5. 转换方法

# 转为整数矩形QRect
int_rect = rect.toRect()  # 四舍五入坐标# 转置宽高
transposed = rect.transposed()  # 宽高交换

6. 状态判断

print(QRectF().isNull())   # True(宽高均为0)
print(QRectF(0,0,0,10).isEmpty())  # True(宽或高为0)
print(QRectF(0,0,10,10).isValid())  # True

类特点总结

1. 浮点精度:

• 使用float类型存储坐标,适合需要高精度定位的场景

• 可精确表示小数位置和尺寸(如50.5像素)

2. 坐标系统:

• 使用Top-Left坐标系(左上角为原点)

• 边界方法包含数学边界(right()和bottom()返回实际坐标+宽高)

3. 有效性判断:

isValid():宽高均>0时为True

isEmpty():宽或高≤0时为True

isNull():宽高均为0时为True

4. 几何运算:

• 支持交集(intersected)、并集(united)、包含检测

• 提供adjusted()进行相对调整和setRect()绝对设置

5. 类型转换:

• 与QRect可互转(toRect()会四舍五入)

• 与QPointF/QSizeF无缝协作

6. 特殊处理:

• normalized()自动处理负宽高情况

• transposed()交换宽高

• 支持margin操作(marginsAdded/Removed)

典型应用场景

1. 图形碰撞检测:

def check_collision(obj1, obj2):return obj1.geometry().intersects(obj2.geometry())

2. 动态布局调整:

def resize_handler(new_size):global rectrect.setSize(QSizeF(new_size.width()*0.8, new_size.height()-20))update()

3. 高精度绘图:

painter.drawEllipse(QRectF(100.5, 200.3, 50.7, 50.7))  # 平滑圆形绘制

4. 动画路径计算:

def animate(pos):current_rect = QRectF(pos.x(), pos.y(), 50, 50)return current_rect.translated(2.5, 1.8)  # 平滑移动

注意事项

1. 坐标系差异:

• 数学坐标系:右下边界包含计算值(right=x+width)

• 渲染时:抗锯齿处理会使实际绘制范围略大于数学范围

2. 精度转换:

• 转QRect时使用四舍五入,可能丢失精度

• 关键计算建议保持QRectF类型直到最终渲染

3. 性能优化:

• 频繁计算时建议使用adjust()代替adjusted()

• 批量操作时优先使用setCoords/setRect

4. 异常处理:

• 所有参数必须为有限数值(非NaN/Inf)

• 无效矩形无法进行几何运算

5. 边界情况:

# 处理负尺寸
rect = QRectF(100, 100, -50, -30)
valid_rect = rect.normalized()  # (50, 70, 50, 30)

附:与QRect核心区别

特性QRectQRectF
存储类型整数(int)浮点数(float)
精度像素级对齐亚像素级精度
构造开销较低略高
适用场景UI元素定位图形绘制/动画/复杂计算
转换方式直接截断四舍五入
无效值处理(0,0,0,0)允许负宽高(需normalized)

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

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

相关文章

Electron主进程渲染进程间通信的方式

在 Electron 中,主进程和渲染进程之间的通信主要通过 IPC(进程间通信)机制实现。以下是几种常见的通信方式: 1. 渲染进程向主进程发送消息(单向) 渲染进程可以通过 ipcRenderer.send 向主进程发送消息&am…

【C++基础知识】C++类型特征组合:`disjunction_v` 和 `conjunction_v` 深度解析

这两个模板是C17引入的类型特征组合工具,用于构建更复杂的类型判断逻辑。下面我将从技术实现到实际应用进行全面剖析: 一、基本概念与C引入版本 1. std::disjunction_v (逻辑OR) 引入版本:C17功能:对多个类型特征进行逻辑或运算…

私有知识库 Coco AI 实战(二):摄入 MongoDB 数据

在之前的文章中,我们介绍过如何使用《 Logstash 迁移 MongoDB 数据到 Easyseach》,既然 Coco AI 后台数据存储也使用 Easysearch,我们能否直接把 MongoDB 的数据迁移到 Coco AI 的 Easysearch,使用 Coco AI 对数据进行检索呢&…

sql server 与navicat测试后,连接qt

先用Navicat测试和sql的连通性,Navicat和sql连通之后,qt也能和sql连通了。 Navicat和Sqlserver Management 能连上,项目无法连接本地 Navicat 连接SQLServer 数据库 QT国内镜像网站 Navicat连接SqlServer的问题点 Sql Server的基本配置以及使…

2025年3月电子学会青少年机器人技术(六级)等级考试试卷-理论综合

青少年机器人技术等级考试理论综合试卷(六级) 分数:100 题数:30 一、单选题(共20题,共80分) 1. 2025年初,中国科技初创公司深度求索在大模型领域迅速崛起,其开源的大模型成为全球AI领域的焦…

spark local模式搭建运行示例

Apache Spark 是一个强大的分布式计算框架,但在本地模式下,它也可以作为一个单机程序运行,非常适合开发和测试阶段。以下是一个简单的示例,展示如何在本地模式下搭建和运行 Spark 程序。 一、环境准备 安装 Java Spark 需要 Java…

【人工智能】解锁 AI 潜能:DeepSeek 大模型迁移学习与特定领域微调的实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大型语言模型(LLMs)的快速发展,迁移学习与特定领域微调成为提升模型性能的关键技术。本文深入探讨了 DeepSeek 大模型在迁移学习中的…

视频智能分析平台EasyCVR无线监控:全流程安装指南与功能应用解析

在当今数字化安防时代,无线监控系统的安装与调试对于保障各类场所的安全至关重要。本文将结合EasyCVR视频监控的强大功能,为您详细阐述监控系统安装过程中的关键步骤和注意事项,帮助您打造一个高效、可靠的监控解决方案。 一、调试物资准备与…

【k8s系列7-更新中】kubeadm搭建Kubernetes高可用集群-三主两从

主机准备 结合前面的章节,这里需要5台机器,可以先创建一台虚拟机作为基础虚拟机。优先把5台机器的公共部分优先在一台机器上配置好 1、配置好静态IP地址 2、主机名宇IP地址解析 [root@localhost ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost…

【Java后端】MyBatis 与 MyBatis-Plus 如何防止 SQL 注入?从原理到实战

在日常开发中,SQL 注入是一种常见但危害巨大的安全漏洞。如果你正在使用 MyBatis 或 MyBatis-Plus 进行数据库操作,这篇文章将带你系统了解:这两个框架是如何防止 SQL 注入的,我们又该如何写出安全的代码。 什么是 SQL 注入&#…

数据分析案例:医疗健康数据分析

目录 数据分析案例:医疗健康数据分析1. 项目背景2. 数据加载与预处理2.1 加载数据2.2 数据清洗3. 探索性数据分析(EDA)3.1 再入院率概览3.2 按年龄分组的再入院率3.3 住院时长与再入院4. 特征工程与可视化5. 模型构建与评估5.1 数据划分5.2 训练逻辑回归5.3 模型评估6. 业务…

3台CentOS虚拟机部署 StarRocks 1 FE+ 3 BE集群

背景:公司最近业务数据量上去了,需要做一个漏斗分析功能,实时性要求较高,mysql已经已经不在适用,做了个大数据技术栈选型调研后,决定使用StarRocks StarRocks官网:StarRocks | A High-Performa…

软件设计师/系统架构师---计算机网络

概要 什么是计算机网络? 计算机网络是指将多台计算机和其他设备通过通信线路互联,以便共享资源和信息的系统。计算机网络可以有不同的规模,从家庭网络到全球互联网。它们可以通过有线(如以太网)或无线(如W…

1.5软考系统架构设计师:架构师的角色与能力要求 - 超简记忆要点、知识体系全解、考点深度解析、真题训练附答案及解析

超简记忆要点 角色职责 需求规划→架构设计→质量保障 能力要求 技术(架构模式/性能优化) 业务(模型抽象→技术方案) 管理(团队协作/风险控制) 知识体系 基础:CAP/设计模式/网络协议案例&am…

基于STM32的汽车主门电动窗开关系统设计方案

芯片和功能模块选型 主控芯片 STM32F103C8T6:基于 ARM Cortex - M3 内核,有丰富的 GPIO 接口用于连接各类外设,具备 ADC 模块可用于电流检测,还有 CAN 控制器方便实现 CAN 总线通信。它资源丰富、成本低,适合学生进行 DIY 项目开发。按键模块 轻触按键:用于控制车窗的自…

第十三届蓝桥杯 2022 C/C++组 修剪灌木

目录 题目: 题目描述: 题目链接: 思路: 核心思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: P8781 [蓝桥杯 2022 省 B] 修…

6.学习笔记-SpringMVC-拦截器(P71-P74)

1.拦截器简介 拦截器的底层思想是AOP思想 2.拦截器入门案例 (一)制作拦截器的功能类 一般情况下,拦截器都是给表现层用的,所以创建在controller下。 (二)配置拦截器的执行位置 在projectinterceptor.…

GAIA-2:用于自动驾驶的可控多视图生成世界模型

25年3月来自英国创业公司 Wayze 的论文“GAIA-2: A Controllable Multi-View Generative World Model for Autonomous Driving”。(注:23年9月其发布GAIA-1) 生成模型为模拟复杂环境提供一种可扩展且灵活的范例,但目前的方法不足…

《算法笔记》10.4小节——图算法专题->最短路径 问题 D: 最短路径

题目描述 有n个城市m条道路&#xff08;n<1000, m<10000)&#xff0c;每条道路有个长度&#xff0c;请找到从起点s到终点t的最短距离和经过的城市名。 输入 输入包含多组测试数据。 每组第一行输入四个数&#xff0c;分别为n&#xff0c;m&#xff0c;s&#xff0c;t…

深度解析 Kubernetes 配置管理:如何安全使用 ConfigMap 和 Secret

目录 深度解析 Kubernetes 配置管理&#xff1a;如何安全使用 ConfigMap 和 Secret一、目录结构二、ConfigMap 和 Secret 的创建1. 创建 ConfigMapconfig/app-config.yaml&#xff1a;config/db-config.yaml&#xff1a; 2. 创建 Secretsecrets/db-credentials.yaml&#xff1a…