QRect与QRectF的区别

QRect与QRectF的区别

对于QRect来说,使用TopLeft获得的是正确的左上角坐标,但是其BottomRight()坐标是不正确的!
对比QRectF就很清晰了.
QRectF Class

QRectF

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

 

QRect QRectF 的 adjust()及adjusted()

void adjust(dx1,dy1,dx2,dy2)的功能在于修改这个变量本身
QRect adjusted(dx1,dy1,dx2,dy2)不修改变量本身,而是返回一个调整过后的QRect

dx1,dy1调整矩形左上角点位置
dx2,dy2调整矩形右下角点位置
QRect rect1 = QRect(0,0,10,20);
rect1.adjust(5,5,-1,-2);//rect1的区域(5,5,9,18)
auto rect2 = rect1.adjusted(-2,-1,5,-3);//rect1依然为(5,5,9,18) rect2为(3,4,14,15)
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值