Qt QRect與QRectF的區別


一直在與QRect和QRectF打交道。
甚至在使用過程中因為QRect而出現了致命的Bug。
因為QRect在數據存儲表示上有一個很大的“歷史遺留問題”!

 

QRect Class

 
也就是說,對於QRect來說,使用TopLeft獲得的是正確的左上角坐標,但是其BottomRight()坐標是不正確的!
對比QRectF就很清晰了.

QRectF Class
 
 

例子

拿一個例子來對比,假設有一個矩形左上角為(0, 0),長寬都為100.那么我們期待的一個矩形的左上角和右下角應該是(0, 0)(100, 100)。
但,如果用構造函數QRect(0, 0, 100, 100)會得到:

  • 左上角(0, 0)
  • 右下角(0, 99)

而對於構造函數QRectF(0, 0, 100, 100)會得到:

  • 左上角(0.0, 0.0)
  • 右下角(0.0, 100.0)

但是,這里的QRect和QRectF在實際繪制過程中會重疊,也就是說他們實際上是一樣的。

所以文檔才建議,或者你可以使用QRectF,否則就要把這個陷阱銘記於心。
同時構造QRect的時候,建議使用。

  • QRect(int x, int y, int width, int height)
    同時在代碼中避免使用QRect的:
  • right()
  • bottom()
    相關函數。
    或者,將錯就錯,在構造時候使用了TopLeft和BottomRight,那么就記得要+1或者-1,或者在后續使用過程中對獲得的Width或者Height進行+/-1。

注意

請注意使用如下兩個構造函數構造同一個矩形的差異。

  • QRect(QPoint topLeft, QPoint bottomRight)
  • QRect(int x, int y, int width, int height)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM