【QT学习笔记】QT教程:QRect类

本文详细介绍了QRect类在C++中如何使用整数精度在平面上定义矩形,包括构造方法、坐标处理、尺寸操作、边界呈现规则以及需要注意的约束。
摘要由CSDN通过智能技术生成

QRect类使用整数精度在平面上定义了一个矩形。

Header:

	#include <QRect>

CMake:

find_package(Qt6 COMPONENTS Core REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Core)

qmake:

QT += core

注意:这个类中的所有函数都是可重入的。

详细说明

矩形通常表示为左上角和大小。QRect的大小(宽度和高度)总是等价于数学矩形(构成其呈现的基础)。

QRect可以用一组左、顶、宽和高整数来构造,也可以用QPoint和QSize来构造。下面的代码创建了两个相同的矩形。

QRect r1(100, 200, 11, 16);
QRect r2(QPoint(100, 200), QSize(11, 16));

还有第三个构造函数使用左上角和右下角坐标创建QRect,但是我们建议您避免使用它。其基本原理是由于历史原因,由bottom()和right()函数返回的值偏离了矩形真正的右下角。

QRect类提供了一组函数,它们返回各种矩形坐标,并支持对它们进行操作。QRect还提供了相对于各种坐标移动矩形的函数。此外,还有一个moveTo()函数可以移动矩形,使其左上角保持在给定的坐标位置。或者,translate()函数将矩形移动到给定的相对于当前位置的偏移量,然后translate()函数返回该矩形的已翻译副本

size() 函数的作用是:返回矩形的尺寸为QSize。尺寸也可以使用width()和height()函数单独检索。使用setSize()、setWidth()或setHeight()函数来操作维度。或者,可以通过应用设置矩形坐标的函数来更改大小,例如setBottom()或setRight()。

contains()函数的作用是:告知给定的点是否在矩形内;如果矩形与给定的矩形相交,则intersects()函数返回true。QRect类还提供了intersected()函数,它返回相交的矩形,以及united()函数,它返回包含给定矩形的矩形,并如下所示:

在这里插入图片描述
如果left() > right()或top() > bottom(),则isEmpty()函数返回true。请注意,空矩形是无效的:如果left() <= right()和top() <= bottom(),则isValid()函数返回true。另一方面,一个空矩形(isNull() == true)的宽度和高度都设置为0。

注意,由于QRect和QRectF的定义方式,空QRect的定义基本上与QRectF相同。

最后,可以对QRect对象进行流化和比较。

呈现

当使用反锯齿绘制器时,QRect的边界线将在数学矩形边界线的两侧对称地绘制。但是当使用别名绘制器(默认)时,应用其他规则。

然后,当使用一个像素宽的笔进行渲染时,QRect的边界线将被渲染到数学矩形边界线的右边和下面。

当使用两个像素宽的笔进行渲染时,边界线将被数学矩形从中间分割。当画笔被设置为偶数像素时,当画笔被设置为奇数像素时,备用像素将被渲染到数学矩形的右边和下面,就像在一个像素的情况下一样。
在这里插入图片描述

坐标

QRect类提供了一组函数,它们返回各种矩形坐标,并支持对它们进行操作。QRect还提供了相对于各种坐标移动矩形的函数。

以left(), setLeft()和moveLeft()函数为例:左()返回矩形的坐标的左边缘,setLeft()矩形的左边缘设置为给定的x坐标(它可能改变宽度,但永远不会改变矩形的右边缘)和moveLeft()整个矩形水平移动,离开矩形的左边缘在给定的x坐标和其大小不变。
在这里插入图片描述
请注意,由于历史原因,由bottom()和right()函数返回的值偏离了矩形真正的右下角:right()函数返回left() + width() - 1, bottom()函数返回top() + height() - 1。由bottomRight()函数返回的point也是同样的情况。另外,topRight()函数和bottomLeft()函数的x坐标和y坐标与右真边和底边的偏差是相同的。

我们建议使用x() + width()和y() + height()来找到真正的右下角,避免使用right()和bottom()。另一种解决方案是使用QRectF: QRectF类使用浮点精度在坐标上定义平面中的矩形,QRectF::right()和QRectF::bottom()函数确实返回右坐标和底坐标。

还可以使用adjust()函数向这个矩形的坐标添加偏移量,也可以使用adjusted()函数根据对原矩形的调整获取新的矩形。如果宽度和高度是负的,使用normalized()函数来获取一个边角被交换的矩形。

此外,QRect提供了getCoords()函数,它提取矩形的左上角和右下角的位置,以及getRect()函数,它提取矩形的左上角、宽度和高度。使用setCoords()和setRect()函数一次性操作矩形的坐标和尺寸。

约束

QRect被限制为int类型的最小值和最大值。QRect上的操作可能会导致值超出这个范围,这将导致未定义的行为。

参见QRectF和QRegion。

成员函数

QRect

QRect::QRect(int x, int y, int width, int height)

构造一个以(x, y)为左上角、给定宽度和高度的矩形。

参见setRect()

QRect::QRect(const QPoint &topLeft, const QSize &size)

构造具有给定顶角和给定大小的矩形。

参见setTopLeft()和setSize()。

QRect::QRect(const QPoint &topLeft, const QPoint &bottomRight)

构造一个矩形,包含给定的顶角和右下角。

如果右下角比顶部更高且在顶部的左边,则定义的矩形将不包含角。

注意:为了确保这两个点都被包含,而不考虑相对顺序,请使用span()。

参见setTopLeft()、setBottomRight()和span()。

QRect::QRect()

构造一个空矩形。

参见isNull()。

参考文献:Qt:QRect类-CSDN博客

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IIIIIII_II

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值