zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Opencv之像素值的获取
    亚像素级角点检测
    Shi-Tomasi角点检测
    卡尔曼滤波
    Harris角点检测理论
    ROS2GO 与WIN10 双系统安装
    数字集成电路物理设计学习总结——物理设计建库域验证
    跨时钟域信号传输(二)——数据信号篇
    跨时钟域信号传输(一)——控制信号篇
    亚稳态与多时钟切换
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12375790.html
Copyright © 2011-2022 走看看