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.pswp.cn/news/902757.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902757.shtml
英文地址,請注明出處:http://en.pswp.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…