Qt掃盲-QRect矩形描述類

QRect矩形描述總結

  • 一、概述
  • 二、常用函數
    • 1. 移動類
    • 2. 屬性函數
    • 3. 判斷
    • 4. 比較計算
  • 三、渲染
  • 三、坐標

一、概述

QRect類使用整數精度在平面中定義一個矩形。在繪圖的時候經常使用,作為一個二維的參數描述類。

一個矩形主要有兩個重要屬性,一個是坐標(x,y),一個是尺寸(長寬)。所以QRect的構造函數也是這樣描述的。
QRect可以用一組左、頂、寬、高整數來構造,也可以用QPoint和QSize來構造。下面的代碼創建了兩個相同的矩形。

QRect r1(100, 200, 11, 16);
QRect r2(QPoint(100, 200), QSize(11, 16));

還有第三個構造函數,它使用左上角和右下角的坐標創建QRect,但我們建議我們避免使用它。其基本原理是由于歷史原因,bottom()和right()函數返回的值偏離了矩形的真正右下角。

二、常用函數

QRect類提供了一組函數,這些函數返回各種矩形坐標,并支持對這些坐標的操作。

1. 移動類

QRect還提供了相對于各種坐標移動矩形的函數,以move開頭的函數都不會修改矩形的大小,只是改坐標值。

移動的要點在于移動的Rect的方向,看名稱就知道,移動會有矩形的四個角點,還會有X,Y方向。

  • moveBottom(int y)
  • moveBottomLeft(const QPoint &position)
  • moveBottomRight(const QPoint &position)
  • moveCenter(const QPoint &position)
  • moveLeft(int x)
  • moveRight(int x)
  • moveTo(int x, int y)
  • moveTo(const QPoint &position)
  • moveTop(int y)
  • moveTopLeft(const QPoint &position)
  • moveTopRight(const QPoint &position)

translate()函數將矩形相對于當前位置移動給定的偏移量,translate()函數返回該矩形的轉換副本,這個參數是移動多少量,而move系列函數是移動到坐標。

2. 屬性函數

size() 函數的作用是:以QSize的形式返回矩形的維度。還可以使用width()和height()函數分別檢索尺寸。要操作尺寸,可以使用setSize()、setWidth()或setHeight()函數。也可以通過應用設置矩形坐標的函數之一來更改大小,例如setBottom()或setRight()。

相應的還有很多獲取矩形的坐標點,尺寸等屬性等函數。就像下面一樣,矩形的坐標點有topLeft、BottomRight等信息。
在這里插入圖片描述

3. 判斷

  • contains() :告訴給定的點是否在矩形內,
  • intersects():判斷這個矩形與給定的矩形相交,

在圖形處理中,QRect類還提供了intersected()函數,該函數返回交點矩形,以及united()函數,該函數返回包含給定矩形和以下內容的矩形,有時候求面積的話就可以不用再自己寫了。下面是兩個函數的差別示意圖:
在這里插入圖片描述

如果left() > right()或top() > bottom(),則isEmpty()函數返回true。請注意,空矩形是無效的:isValid()函數如果left() <= right()且top() <= bottom()則返回true。另一方面,空矩形(isNull() == true)的寬度和高度都設置為0。

還有一個比較常用的函數是轉置函數

QRect r = {15, 51, 42, 24};
r = r.transposed(); // r == {15, 51, 24, 42}

由于QRect和QRectF的定義方式,空QRect的定義方式基本上與QRectF相同。

4. 比較計算

這個也可以用 + 、- 、!= 等運算符。QRect對象可以流式化,也就是可以用QDataStream去序列化數據。

bool operator!=(const QRect &r1, const QRect &r2)
QRect operator+(const QRect &rectangle, const QMargins &margins)
QRect operator+(const QMargins &margins, const QRect &rectangle)
QRect operator-(const QRect &lhs, const QMargins &rhs)
QDataStream &operator<<(QDataStream &stream, const QRect &rectangle)
bool operator==(const QRect &r1, const QRect &r2)
QDataStream &operator>>(QDataStream &stream, QRect &rectangle)

三、渲染

當使用抗混疊繪制器時,QRect的邊界線將在數學矩形邊界線的兩側對稱地渲染。但是當使用別名繪制器(默認)時,其他規則適用。然后,當使用一個像素寬的筆渲染時,QRect的邊界線將渲染到數學矩形邊界線的右側和下方。

當使用兩個像素寬的筆渲染時,邊界線將被數學矩形從中間分割。當筆被設置為偶數像素時,就會出現這種情況,當使用帶有奇數像素的筆進行渲染時,多余的像素將被渲染到數學矩形的右側和下方,就像在一個像素的情況下一樣。
在這里插入圖片描述

三、坐標

QRect類提供了一組函數,這些函數返回各種矩形坐標,并支持對這些坐標的操作。QRect還提供了相對于各種坐標移動矩形的函數。
例如,left(), setLeft()和movelleft()函數作為示例:left()返回矩形左邊緣的x坐標,setLeft()將矩形的左邊緣設置為給定的x坐標(它可以改變寬度,但永遠不會改變矩形的右邊緣),movelleft()將整個矩形水平移動,使矩形的左邊緣保持給定的x坐標,其大小不變。
在這里插入圖片描述
請注意,由于歷史原因,bottom()和right()函數返回的值偏離了矩形的真正右下角:right()函數返回left() + width() - 1, bottom()函數返回top() + height() - 1。對于方便函數bottomRight()返回的點也是如此。此外,topRight()和bottomLeft()函數的x和y坐標分別包含與真正的右邊緣和底邊緣相同的偏差。

Qt建議我們使用x() + width()和y() + height()來找到真正的右下角,并避免使用right()和bottom()。

另一個解決方案是使用QRectF: QRectF類在平面中使用浮點精度的坐標定義一個矩形,QRectF::right()和QRectF::bottom()函數確實返回右坐標和底坐標。

還可以使用adjust()函數向這個矩形的坐標添加偏移量,也可以使用adjusted()函數基于對原始矩形的調整來檢索一個新的矩形。如果寬度和高度中的任何一個為負,則使用 normalized() 函數來檢索角被交換的矩形。

  • normalized()
    返回一個規范化矩形;也就是說,一個具有非負寬度和高度的矩形。
    如果width() < 0,函數將交換左右角,如果height() < 0,函數將交換上下角。

此外,QRect還提供了getcoord()函數,該函數提取矩形的左上角和右下角的位置,以及getRect()函數,該函數提取矩形的左上角、寬度和高度。使用setcoord()和setRect()函數一次操作矩形的坐標和尺寸。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/38611.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/38611.shtml
英文地址,請注明出處:http://en.pswp.cn/web/38611.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

同步互斥與通信

目錄 一、同步與互斥的概念 二、同步與互斥并不簡單 三、各類方法的對比 一、同步與互斥的概念 一句話理解同步與互斥&#xff1a;我等你用完廁所&#xff0c;我再用廁所。 什么叫同步&#xff1f;就是&#xff1a;哎哎哎&#xff0c;我正在用廁所&#xff0c;你等會。 什…

【實戰場景】記一次UAT jvm故障排查經歷

【實戰場景】記一次UAT jvm故障排查經歷 開篇詞&#xff1a;干貨篇&#xff1a;1.查看系統資源使用情況2.將十進制進程號轉成十六進制3.使用jstack工具監視進程的垃圾回收情況4.輸出指定線程的堆內存信息5.觀察日志6.本地環境復現 總結篇&#xff1a;我是杰叔叔&#xff0c;一名…

線下促銷折扣視頻介紹

千呼新零售2.0系統是零售行業連鎖店一體化收銀系統&#xff0c;包括線下收銀線上商城連鎖店管理ERP管理商品管理供應商管理會員營銷等功能為一體&#xff0c;線上線下數據全部打通。 適用于商超、便利店、水果、生鮮、母嬰、服裝、零食、百貨、寵物等連鎖店使用。 詳細介紹請…

Linux上systemctl 和 service 兩個命令的區別和聯系

systemctl 和 service 兩個命令都是 Linux 系統中用于管理服務的工具&#xff0c;但它們分別關聯著不同的初始化系統&#xff08;init system&#xff09;&#xff0c;并且在功能和使用場景上有所差異。 service 命令 關聯的初始化系統&#xff1a;service 命令通常與 SysV i…

Python從零學習筆記(1)

1pip無法調用 剛入python&#xff0c;需要用到第三方模塊&#xff0c;但是按照教程使用>>>pip install 總是出現錯誤提示 網上查詢許久&#xff1a;語句沒錯&#xff1b;安裝沒錯&#xff1b;環境配置也正常 最后才知道是不能先進入python模式&#xff0c;而是使用p…

2024年道路運輸安全員考試題庫及答案

一、多選題 11.《放射性物品安全管理條例》規定&#xff0c;運輸放射性物品時&#xff0c;應當使用專用的放射性物品運輸包裝容器。在運輸過程中正確的做法有&#xff08; &#xff09;。 A.托運人和承運人應當按照國家放射性物品運輸安全標準和國家有關規定&#xff0c;在…

什么是定時器?

前言&#x1f440;~ 上一章我們介紹了阻塞隊列以及生產者消息模式&#xff0c;今天我們來講講定時器 定時器 標準庫中的定時器 schedule()方法 掃描線程 手動實現定時器 任務類 存儲任務的數據結構 定時器類 如果各位對文章的內容感興趣的話&#xff0c;請點點小贊&am…

【Python】列表

目錄 一、列表的概念 二、列表的創建 1.變量名 [ ] ..... 2.通過Python內置 的I ist類的構造函數來創建列表 三、操作列表元素的方法 1. 修改 2. 增加元素 3. 刪除 4. 其他操作 四、遍歷列表 五、列表排序 六、列表切片&#xff08;list slicing&#xff09; 七、…

淺談什么是計算機科學與技術(Computer Science,CS)

計算機科學的核心內容 計算機科學&#xff08;Computer Science, CS&#xff09;涵蓋了以下主要領域&#xff1a; 硬件&#xff1a;涉及數字電路、集成電路、存儲器和硬件設計與驗證方法等。 例子&#xff1a;學習如何設計和實現一個簡單的CPU&#xff0c;包括理解指令集、時鐘…

值得細讀的8個視覺大模型生成式預訓練方法

作者&#xff1a;vasgaowei&#xff08;已授權原創&#xff09; 編輯: AI生成未來 鏈接&#xff1a;https://zhuanlan.zhihu.com/p/677794719 大語言模型的進展催生出了ChatGPT這樣的應用&#xff0c;讓大家對“第四次工業革命”和“AGI”的來臨有了一些期待&#xff0c;也作為…

Linux基礎指令介紹與詳解——原理學習

前言&#xff1a;本節內容標題雖然為指令&#xff0c;但是并不只是講指令&#xff0c; 更多的是和指令相關的一些原理性的東西。 如果友友只想要查一查某個指令的用法&#xff0c; 很抱歉&#xff0c; 本節不是那種帶有字典性質的文章。但是如果友友是想要來學習的&#xff0c;…

[ALSA]從零開始,使用ALSA驅動播放一個音頻

前言 最近學了不少有關音頻相關的&#xff0c;最近搞一下ALSA驅動 安裝 參考Linux應用開發【第八章】ALSA應用開發 中提到的ALSA庫及工具章節&#xff0c;本文中有比較詳細的有關ALSA驅動引用程序怎么安裝的&#xff0c;這里不再贅述。 關于ALSA&#xff0c;就當成一個音頻…

深入淺出:npm常用命令詳解與實踐【保姆級教程】

大家好,我是CodeQi! 在我剛開始學習前端開發的時候,有一件事情讓我特別頭疼:管理和安裝各種各樣的依賴包。 那時候,我還不知道 npm 的存在,手動下載和管理這些庫簡直是噩夢。 后來,我終于接觸到了 npm(Node Package Manager),它不僅幫我解決了依賴管理問題,還讓我…

Python深度理解系列之【排序算法——冒泡排序】

讀者大大們好呀&#xff01;&#xff01;!?????? &#x1f440;期待大大的關注哦?????? &#x1f680;歡迎收看我的主頁文章??木道尋的主頁 文章目錄 &#x1f525;前言&#x1f680;冒泡排序python實現算法實現圖形化算法展示 ??????總結 &#x1f525;前…

Apache POI、EasyPoi、EasyExcel

目錄 ?編輯 &#xff08;一&#xff09;Apache PoI 使用 &#xff08;二&#xff09;EasyPoi使用 &#xff08;三&#xff09;EasyExcel使用 寫 讀 最簡單的讀? 最簡單的讀的excel示例? 最簡單的讀的對象? &#xff08;一&#xff09;Apache PoI 使用 &#xff08;二&…

golang go-bindata打包配置文件嵌入到二進制文件

go-bindata打包配置文件嵌入到二進制文件 項目中難免會用到一些靜態資源和配置文件&#xff0c;但是常規打包的二進制文件無法再其他目錄正常運行&#xff08;靜態資源和配置文件不存在&#xff09; 有類似需求的可以安裝使用&#xff1a;go-bindata進行編譯處理配置文件 go-bi…

train_encoder_decoder.py

train_encoder_decoder.py from __future__ import print_function #為了確保代碼同時兼容Python 2和Python 3版本中的print函數# 導入標準庫和第三方庫 import os.path #導入了Python的os.path模塊&#xff0c;用于處理文件和目錄路徑 from os import path #從os模塊中導入了…

【場景題】數據庫優化和接口優化——異步思想

理解 異步處理&#xff1a; 對于耗時的操作&#xff0c;可以考慮使用異步處理方式來提升接口的響應速度。用戶可以在不阻塞當前操作的情況下&#xff0c;等待異步操作的結果。 異步處理在數據庫優化中的應用 雖然數據庫操作本身&#xff08;如查詢、插入、更新等&#xff09…

Git 安裝

目錄 Git 安裝 Git 安裝 在使用 Git 前我們需要先安裝 Git。Git 目前支持 Linux/Unix、Solaris、Mac 和 Windows 平臺上運行。Git 各平臺安裝包下載地址為&#xff1a;http://git-scm.com/downloads 在 Linux 平臺上安裝&#xff08;包管理工具安裝&#xff09; 首先&#xff0…

IIS在Windows上的搭建

&#x1f4d1;打牌 &#xff1a; da pai ge的個人主頁 &#x1f324;?個人專欄 &#xff1a; da pai ge的博客專欄 ??寶劍鋒從磨礪出&#xff0c;梅花香自苦寒來 目錄 一 概念&#xff1a; 二網絡…