zoukankan      html  css  js  c++  java
  • QRect与QRectF的区别

        在Qt的使用过程中不免要与QRect和QRectF打交道。

        但是,QRect在数据存储表示上有一个很大的“历史遗留问题”!

        引申自QtAssistent对QRect的一段话:

        注意,由于历史原因,bottom()和right()函数返回的值偏离了矩形的真正的右下角:right()函数返回left() + width() - 1, bottom()函数返回top() + height() - 1bottomRight()函数返回的点也是如此。此外,topRight()函数和bottomLeft()函数的x坐标和y坐标分别包含与真正的右下角和右下角相同的偏差
        我们建议您使用x() + width()和y() + height()来找到真正的右下角,并避免使用right()和bottom()。另一种解决方案是使用QRectF: QRectF类使用坐标的浮点精度在平面中定义一个矩形,并且QRectF::right()和QRectF::bottom()函数确实返回右坐标和底部坐标。
        还可以使用adjust()函数向这个矩形的坐标添加偏移量,以及使用adjusted()函数根据原始矩形的调整检索一个新矩形。如果宽度和高度都为负,则使用规范化()函数检索交换角的矩形。
        此外,QRect提供getCoords()函数,该函数提取矩形的左上角和右下角的位置,getRect()函数提取矩形的左上角、宽度和高度。使用setCoords()和setRect()函数一次性操作矩形的坐标和维度。

        也就是说,对于QRect来说,只有使用TopLeft()获得的才是正确的左上角坐标。

        例子:

        拿一个例子来对比,假设有一个矩形左上角为(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。

  • 相关阅读:
    大数相乘
    分层打印二叉树
    sharepoint 编辑页面时应该注意的一些地方
    sharepoint2007在创建Web应用程序时的问题
    asp.net页面编码问题
    “ ”在IE和FF下显示不一致问题
    DataReader为数据源时的数据获取时的数据获取问题
    sharepoint个人视图修改问题
    母板页图片使用相对路径显示问题
    Web Part Templates for Microsoft Visual Studio .NET下载地址
  • 原文地址:https://www.cnblogs.com/f-wind/p/13852008.html
Copyright © 2011-2022 走看看