「QT」几何数据类 之 QSizeF 浮点型尺寸类
✨博客主页 | ||
---|---|---|
何曾参静谧的博客 | ||
📌文章专栏 | ||
「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中QSizeF类详解(基于Qt 5.15版本)
一、类的引言
QSizeF类是Qt框架中用于表示二维对象浮点大小的重要类。与QSize类不同,QSizeF使用浮点数(通常是qreal
类型,在Qt中通常定义为double
)来表示宽度和高度,从而提供了更高的精度。这在处理需要高精度的图形操作时尤为重要,如精确绘制、缩放和布局管理等。
官方文档:https://doc.qt.io/qt-5/qsizef.html
二、使用范围
QSizeF类主要用于以下场景:
- 在需要高精度尺寸计算的图形绘制中。
- 在处理缩放、旋转等图形变换时。
- 在布局管理器中指定控件的浮点大小。
- 在进行尺寸比较、缩放、交换等操作时,需要更高的精度。
三、类的头文件
在Qt 5.15版本中,QSizeF类的头文件是<QSizeF>
,通常通过包含<QtCore/QSizeF>
来引用。在使用QSizeF类之前,需要确保在项目的.pro文件中添加了QT += core
配置,以包含QtCore模块。
四、类的继承
与QSize类一样,QSizeF类也是一个独立的类,不继承自其他类。它实现了对二维对象浮点大小的表示和操作功能,是Qt几何数据类体系中的一个重要组成部分。
五、类的构造介绍
QSizeF类提供了两个构造函数:
QSizeF()
:构造一个默认的QSizeF对象,其宽度和高度均被设置为0.0。QSizeF(qreal width, qreal height)
:构造一个宽度为width
、高度为height
的QSizeF对象。
何曾参静谧的博客
六、共有函数介绍
QSizeF类提供了以下共有成员函数:
qreal width() const
:返回QSizeF对象的宽度。qreal height() const
:返回QSizeF对象的高度。void setWidth(qreal width)
:设置QSizeF对象的宽度。void setHeight(qreal height)
:设置QSizeF对象的高度。bool isEmpty() const
:如果宽度和高度中的任何一个小于或等于0.0(考虑到浮点数精度问题,通常不会严格等于0.0,而是接近0.0的一个极小值),则返回true
;否则返回false
。但请注意,由于浮点数的特性,判断一个浮点数是否等于0.0通常是不安全的,因此isEmpty()
的实际用途可能有限。bool isValid() const
:如果宽度和高度都是有效的(即大于0.0,考虑到浮点数精度,这里通常意味着不是负数或极小的值),则返回true
;否则返回false
。QSizeF boundedTo(const QSizeF &other) const
:返回一个包含此尺寸和给定other
尺寸的最小宽度和高度的尺寸。QSizeF expandedTo(const QSizeF &other) const
:返回一个包含此尺寸和给定other
尺寸的最大宽度和高度的尺寸。QSizeF scaled(qreal w, qreal h, Qt::AspectRatioMode mode) const
:根据指定的模式mode
,将大小缩放为具有给定宽度w
和高度h
的矩形。QSizeF scaled(const QSizeF &s, Qt::AspectRatioMode mode) const
:与上一个函数类似,但使用另一个QSizeF对象s
作为缩放目标。void transpose()
:交换宽度和高度值。注意,这个函数会修改当前对象。QSizeF transposed() const
:返回交换宽度和高度后的新QSizeF对象,不改变当前对象。
七、static函数介绍
在Qt 5.15版本中,QSizeF类没有提供static成员函数。但Qt框架中的其他类可能会提供与QSizeF相关的static函数,用于执行特定的几何计算或转换。
八、运算符重载
QSizeF类支持以下运算符重载,使得尺寸的操作更加直观和方便:
QSizeF &operator+=(const QSizeF &s)
:将当前QSizeF对象与另一个QSizeF对象s
相加,结果存储在当前对象中。QSizeF &operator-=(const QSizeF &s)
:将当前QSizeF对象与另一个QSizeF对象s
相减,结果存储在当前对象中。QSizeF &operator*=(qreal c)
:将当前QSizeF对象乘以一个浮点数c
,结果存储在当前对象中。QSizeF &operator/=(qreal c)
:将当前QSizeF对象除以一个浮点数c
,结果存储在当前对象中。bool operator==(const QSizeF &s1, const QSizeF &s2)
:比较两个QSizeF对象是否相等,考虑到浮点数精度问题,通常会有一个极小的误差范围。bool operator!=(const QSizeF &s1, const QSizeF &s2)
:比较两个QSizeF对象是否不相等。
此外,QSizeF类还支持与QPointF类相似的操作符重载,如+
、-
、*
和/
等,用于执行尺寸与点的加减、缩放等操作。但请注意,这些操作的结果通常是另一个QSizeF或QPointF对象,而不是直接修改当前对象(除非使用了*=
、/=
等赋值运算符)。
何曾参静谧的博客
九、详细代码举例
以下是一个使用QSizeF类的详细代码示例:
#include <QCoreApplication>
#include <QSizeF>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 构造一个QSizeF对象
QSizeF size1(100.5, 200.75);
qDebug() << "Size1: width=" << size1.width() << ", height=" << size1.height();
// 设置新的宽度和高度
size1.setWidth(150.25);
size1.setHeight(300.5);
qDebug() << "Updated Size1: width=" << size1.width() << ", height=" << size1.height();
// 构造另一个QSizeF对象
QSizeF size2(250.0, 150.75);
// 使用boundedTo函数获取最小尺寸
QSizeF minSize = size1.boundedTo(size2);
qDebug() << "Bounded Size: width=" << minSize.width() << ", height=" << minSize.height();
// 使用expandedTo函数获取最大尺寸
QSizeF maxSize = size1.expandedTo(size2);
qDebug() << "Expanded Size: width=" << maxSize.width() << ", height=" << maxSize.height();
// 使用scaled函数进行缩放,保持宽高比
QSizeF scaledSize = size1.scaled(50.0, 50.0, Qt::KeepAspectRatio);
qDebug() << "Scaled Size: width=" << scaledSize.width() << ", height=" << scaledSize.height();
// 交换宽度和高度
QSizeF transposedSize = size1.transposed();
qDebug() << "Transposed Size: width=" << transposedSize.width() << ", height=" << transposedSize.height();
// 直接修改对象(使用赋值运算符)
size1 *= 0.5; // 缩放为原来的一半
qDebug() << "Halved Size1: width=" << size1.width() << ", height=" << size1.height();
return a.exec();
}
在这个示例中,我们创建了两个QSizeF对象size1
和size2
,并使用了width()
、height()
、setWidth()
、setHeight()
、boundedTo()
、expandedTo()
、scaled()
和transposed()
等成员函数来操作它们。此外,我们还展示了如何使用赋值运算符*=
来直接修改对象。最后,我们使用qDebug()
函数输出了各个尺寸的值。
何曾参静谧的博客
原文地址:https://blog.csdn.net/qq_49443542/article/details/143655290
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!