qq空间做宣传网站,工业设计公司官网,聊城专业建设学校,wordpress主题 标签QRect矩形描述总结 一、概述二、常用函数1. 移动类2. 属性函数3. 判断4. 比较计算 三、渲染三、坐标 一、概述
QRect类使用整数精度在平面中定义一个矩形。在绘图的时候经常使用#xff0c;作为一个二维的参数描述类。
一个矩形主要有两个重要属性#xff0c;一个是坐标作为一个二维的参数描述类。
一个矩形主要有两个重要属性一个是坐标x,y一个是尺寸长宽。所以QRect的构造函数也是这样描述的。 QRect可以用一组左、顶、宽、高整数来构造也可以用QPoint和QSize来构造。下面的代码创建了两个相同的矩形。
QRect r1(100, 200, 11, 16);
QRect r2(QPoint(100, 200), QSize(11, 16));还有第三个构造函数它使用左上角和右下角的坐标创建QRect但我们建议我们避免使用它。其基本原理是由于历史原因bottom()和right()函数返回的值偏离了矩形的真正右下角。
二、常用函数
QRect类提供了一组函数这些函数返回各种矩形坐标并支持对这些坐标的操作。
1. 移动类
QRect还提供了相对于各种坐标移动矩形的函数以move开头的函数都不会修改矩形的大小只是改坐标值。
移动的要点在于移动的Rect的方向看名称就知道移动会有矩形的四个角点还会有X,Y方向。
moveBottom(int y)moveBottomLeft(const QPoint position)moveBottomRight(const QPoint position)moveCenter(const QPoint position)moveLeft(int x)moveRight(int x)moveTo(int x, int y)moveTo(const QPoint position)moveTop(int y)moveTopLeft(const QPoint position)moveTopRight(const QPoint position)
translate()函数将矩形相对于当前位置移动给定的偏移量translate()函数返回该矩形的转换副本这个参数是移动多少量而move系列函数是移动到坐标。
2. 属性函数
size() 函数的作用是:以QSize的形式返回矩形的维度。还可以使用width()和height()函数分别检索尺寸。要操作尺寸可以使用setSize()、setWidth()或setHeight()函数。也可以通过应用设置矩形坐标的函数之一来更改大小例如setBottom()或setRight()。
相应的还有很多获取矩形的坐标点尺寸等属性等函数。就像下面一样矩形的坐标点有topLeft、BottomRight等信息。
3. 判断
contains() 告诉给定的点是否在矩形内intersects()判断这个矩形与给定的矩形相交
在图形处理中QRect类还提供了intersected()函数该函数返回交点矩形以及united()函数该函数返回包含给定矩形和以下内容的矩形有时候求面积的话就可以不用再自己写了。下面是两个函数的差别示意图
如果left() right()或top() bottom()则isEmpty()函数返回true。请注意空矩形是无效的:isValid()函数如果left() right()且top() bottom()则返回true。另一方面空矩形(isNull() true)的宽度和高度都设置为0。
还有一个比较常用的函数是转置函数
QRect r {15, 51, 42, 24};
r r.transposed(); // r {15, 51, 24, 42}由于QRect和QRectF的定义方式空QRect的定义方式基本上与QRectF相同。
4. 比较计算
这个也可以用 、- 、! 等运算符。QRect对象可以流式化也就是可以用QDataStream去序列化数据。
bool operator!(const QRect r1, const QRect r2)
QRect operator(const QRect rectangle, const QMargins margins)
QRect operator(const QMargins margins, const QRect rectangle)
QRect operator-(const QRect lhs, const QMargins rhs)
QDataStream operator(QDataStream stream, const QRect rectangle)
bool operator(const QRect r1, const QRect r2)
QDataStream operator(QDataStream stream, QRect rectangle)三、渲染
当使用抗混叠绘制器时QRect的边界线将在数学矩形边界线的两侧对称地渲染。但是当使用别名绘制器(默认)时其他规则适用。然后当使用一个像素宽的笔渲染时QRect的边界线将渲染到数学矩形边界线的右侧和下方。
当使用两个像素宽的笔渲染时边界线将被数学矩形从中间分割。当笔被设置为偶数像素时就会出现这种情况当使用带有奇数像素的笔进行渲染时多余的像素将被渲染到数学矩形的右侧和下方就像在一个像素的情况下一样。
三、坐标
QRect类提供了一组函数这些函数返回各种矩形坐标并支持对这些坐标的操作。QRect还提供了相对于各种坐标移动矩形的函数。 例如left() setLeft()和movelleft()函数作为示例left()返回矩形左边缘的x坐标setLeft()将矩形的左边缘设置为给定的x坐标(它可以改变宽度但永远不会改变矩形的右边缘)movelleft()将整个矩形水平移动使矩形的左边缘保持给定的x坐标其大小不变。 请注意由于历史原因bottom()和right()函数返回的值偏离了矩形的真正右下角right()函数返回left() width() - 1, bottom()函数返回top() height() - 1。对于方便函数bottomRight()返回的点也是如此。此外topRight()和bottomLeft()函数的x和y坐标分别包含与真正的右边缘和底边缘相同的偏差。
Qt建议我们使用x() width()和y() height()来找到真正的右下角并避免使用right()和bottom()。
另一个解决方案是使用QRectF: QRectF类在平面中使用浮点精度的坐标定义一个矩形QRectF::right()和QRectF::bottom()函数确实返回右坐标和底坐标。
还可以使用adjust()函数向这个矩形的坐标添加偏移量也可以使用adjusted()函数基于对原始矩形的调整来检索一个新的矩形。如果宽度和高度中的任何一个为负则使用 normalized() 函数来检索角被交换的矩形。
normalized() 返回一个规范化矩形;也就是说一个具有非负宽度和高度的矩形。 如果width() 0函数将交换左右角如果height() 0函数将交换上下角。
此外QRect还提供了getcoord()函数该函数提取矩形的左上角和右下角的位置以及getRect()函数该函数提取矩形的左上角、宽度和高度。使用setcoord()和setRect()函数一次操作矩形的坐标和尺寸。