1. QSize类基础解析
在Qt框架中,QSize类就像裁缝手中的软尺,是处理二维尺寸数据的核心工具。这个不起眼的类实际上支撑着整个Qt界面布局系统的基石,从按钮大小到窗口尺寸,无处不在发挥着关键作用。
QSize本质上是一个值类型(value type),这意味着它的行为更接近int、double这样的基本数据类型,而不是QObject这样的引用类型。这种设计带来几个重要特性:
- 默认使用隐式数据共享(Implicit Sharing)技术,在传值时避免不必要的深拷贝
- 可以直接用等号进行赋值操作
- 适合作为容器类的元素类型
构造函数提供了多种初始化方式:
cpp复制QSize(); // 构造空尺寸(0,0)
QSize(int width, int height); // 指定宽高构造
QSize(const QSize &other); // 拷贝构造
实际开发中最常用的成员变量当然是width和height,但要注意它们都是int类型。这在处理高DPI屏幕时可能成为陷阱——我们后面会专门讨论这个现代GUI开发中的常见痛点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心操作方法详解
2.1 基础尺寸操作
QSize提供的方法就像瑞士军刀一样丰富实用。先看最基础的尺寸调整:
cpp复制QSize size(100, 200);
size.scale(150, 150, Qt::KeepAspectRatio); // 调整为150x300
scale()方法的第三个参数特别重要,它决定了缩放策略:
- Qt::IgnoreAspectRatio:自由拉伸,可能变形
- Qt::KeepAspectRatio:保持比例,可能留有空白
- Qt::KeepAspectRatioByExpanding:保持比例,可能超出目标区域
实测发现一个有趣现象:当使用KeepAspectRatio模式时,Qt内部会先计算宽高比,然后选择较小的一边作为基准。这在实现图片缩略图功能时特别有用。
2.2 数学运算的陷阱
QSize重载了各种数学运算符,但有些行为可能出乎意料:
cpp复制QSize s1(100, 200);
QSize s2(50, 50);
QSize s3 = s1 + s2; // (150,
