✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「QT」QT5程序设计 | ||
📚全部专栏 | ||
「VS」Visual Studio | 「C/C++」C/C++程序设计 | 「UG/NX」BlockUI集合 |
「Win」Windows程序设计 | 「DSA」数据结构与算法 | 「UG/NX」NX二次开发 |
「QT」QT5程序设计 | 「File」数据文件格式 | 「PK」Parasolid函数说明 |
「Py」Python程序设计 | 「Math」探秘数学世界 |
目录
- Qt中的QRectF类
- 一、类的引言
- 二、使用范围
- 三、类的头文件
- 四、类的构造介绍
- 五、共有函数介绍
- 六、Static函数介绍
- 七、运算符重载
- 八、详细代码举例
Qt中的QRectF类
一、类的引言
QRectF是Qt框架中用于描述浮点型矩形的类,它提供了多种构造函数和方法来设置和操作矩形。与QRect类不同,QRectF使用浮点数来表示矩形的坐标和尺寸,这使得它在进行精确绘图和几何计算时更为灵活和准确。QRectF类在Qt的图形视图框架、绘图、碰撞检测及图像处理等多个方面发挥着重要作用。
https://doc.qt.io/qt-5/qrectf.html
二、使用范围
- 绘图:在Qt中绘制图形时,使用QRectF来确定图形的位置和大小,特别是在需要高精度绘图的情况下。
- 图形视图框架:Qt的图形视图框架使用QRectF来描述图形项的位置和边界。
- 碰撞检测:在游戏开发和图形应用中,使用QRectF来判断两个物体是否相交或重叠。
- 图像处理:在图像处理中,使用QRectF来确定图像的区域,进行裁剪、缩放等操作。
三、类的头文件
QRectF类的头文件是<QRectF>
,在使用QRectF类时,需要包含这个头文件。
#include <QRectF>
四、类的构造介绍
QRectF类提供了多种构造函数,允许通过不同的参数来创建矩形对象:
QRectF()
: 创建一个空矩形。QRectF(qreal x, qreal y, qreal width, qreal height)
: 创建一个左上角坐标为(x, y),宽度为width,高度为height的矩形。QRectF(const QPointF &topLeft, const QPointF &bottomRight)
: 创建一个左上角坐标为topLeft,右下角坐标为bottomRight的矩形。QRectF(const QRectF &other)
: 创建一个与other相同的矩形。
五、共有函数介绍
QRectF类提供了丰富的成员函数来操作矩形对象:
-
设置和获取位置与大小
setX(qreal x)
: 设置矩形左上角的x坐标。setY(qreal y)
: 设置矩形左上角的y坐标。setWidth(qreal width)
: 设置矩形的宽度。setHeight(qreal height)
: 设置矩形的高度。topLeft()
: 返回矩形的左上角坐标。topRight()
: 返回矩形的右上角坐标。bottomLeft()
: 返回矩形的左下角坐标。bottomRight()
: 返回矩形的右下角坐标。width()
: 返回矩形的宽度。height()
: 返回矩形的高度。
-
移动和缩放
moveLeft(qreal x)
: 将矩形的左边界移动到x。moveTop(qreal y)
: 将矩形的上边界移动到y。moveRight(qreal x)
: 将矩形的右边界移动到x。moveBottom(qreal y)
: 将矩形的下边界移动到y。moveTopLeft(const QPointF &p)
: 将矩形的左上角移动到p。moveBottomRight(const QPointF &p)
: 将矩形的右下角移动到p。translate(qreal dx, qreal dy)
: 将矩形沿着x轴平移dx,沿着y轴平移dy。scaled(qreal sx, qreal sy, Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio)
: 按比例缩放矩形。
-
判断与相交
isEmpty()
: 判断矩形是否为空。isValid()
: 判断矩形是否有效。contains(const QPointF &point)
: 判断点point是否在矩形内。contains(const QRectF &rect)
: 判断矩形rect是否在矩形内。intersects(const QRectF &rect)
: 判断矩形rect是否与矩形相交。united(const QRectF &other)
: 返回一个包含当前矩形和other矩形的最小矩形。intersected(const QRectF &other)
: 返回当前矩形和other矩形的交集。
-
其他
size()
: 返回矩形的尺寸(宽度和高度)。center()
: 返回矩形的中心点。normalized()
: 返回一个规范化的矩形,即宽度和高度都为正数的矩形。
六、Static函数介绍
与QRect类类似,QRectF类本身并没有提供静态成员函数。静态函数的应用更多见于其他类,用于提供工具函数、单例管理等。然而,QRectF类提供了一些静态方法,这些方法不是严格意义上的静态成员函数,而是作为类的辅助函数存在,用于执行与矩形相关的计算。例如,QRectF::fromRect(const QRect &rect)
可以将一个QRect对象转换为一个QRectF对象。
七、运算符重载
C++支持运算符重载,但QRectF类本身并没有重载运算符。它主要依赖于Qt框架提供的各种成员函数来进行操作。然而,Qt中的其他类如QVector、QString等,利用了运算符重载来提供更简单和自然的语法。
八、详细代码举例
以下是一个简单的代码示例,用于演示QRectF的基本用法:
#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QRectF>
class MyWidget : public QWidget {
public:
void paintEvent(QPaintEvent *event) {
Q_UNUSED(event);
QPainter painter(this);
// 创建一个左上角坐标为(50.0, 50.0),宽为100.0,高为100.0的矩形
QRectF rect1(50.0, 50.0, 100.0, 100.0);
// 创建一个左上角坐标为(150.0, 150.0),右下角坐标为(250.0, 250.0)的矩形
QPointF topLeft(150.0, 150.0);
QPointF bottomRight(250.0, 250.0);
QRectF rect2(topLeft, bottomRight);
// 将矩形rect2的左上角移动到(300.0, 300.0)
rect2.moveTopLeft(QPointF(300.0, 300.0));
// 将矩形rect2沿着x轴平移50.0,沿着y轴平移50.0
rect2.translate(50.0, 50.0);
// 绘制矩形rect1和rect2
painter.setBrush(Qt::NoBrush);
painter.setPen(Qt::black);
painter.drawRect(rect1);
painter.drawRect(rect2);
// 绘制矩形rect1的中心点和rect2的边界
painter.setPen(Qt::red);
painter.drawEllipse(rect1.center(), 5, 5); // 绘制中心点(以红色小圆表示)
painter.setPen(Qt::blue);
painter.drawLine(rect2.topLeft(), rect2.bottomRight()); // 绘制对角线(以蓝色线表示)
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWidget widget;
widget.resize(500, 500);
widget.show();
return app.exec();
}
运行上述代码,将看到一个窗口,其中包含两个矩形。一个是左上角坐标为(50.0, 50.0),宽为100.0,高为100.0的矩形;另一个是左上角坐标为(350.0, 350.0)(经过移动和平移后),宽为100.0,高为100.0的矩形。此外,还绘制了第一个矩形的中心点和第二个矩形的对角线,分别用红色和蓝色表示。