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)