QSize类详细介绍(二维尺寸)

PyQt5 QSize 类详解及常用方法

QSize 是 PyQt5 中用于表示 ​二维尺寸 的类,主要用于描述宽度(width)和高度(height)。它广泛用于控件大小、图像尺寸、布局计算等场景,支持整数坐标值。若需要浮点精度,可使用 QSizeF 类(继承自 QSize)。

一、构造函数

python

QSize()                   # 创建空尺寸(width=0, height=0)
QSize(width: int, height: int)  # 指定宽度和高度

示例

python

from PyQt5.QtCore import QSize

size1 = QSize()            # 空尺寸 (0, 0)
size2 = QSize(200, 100)    # 宽度200,高度100

二、常用方法
方法 说明 示例
获取尺寸
width() -> int 返回宽度 w = size.width()
height() -> int 返回高度 h = size.height()
isEmpty() -> bool 判断尺寸是否为空(任一维度 ≤0) if size.isEmpty(): ...
isValid() -> bool 判断尺寸是否有效(width ≥0 且 height ≥0) if size.isValid(): ...
修改尺寸
setWidth(w: int) 设置宽度 size.setWidth(300)
setHeight(h: int) 设置高度 size.setHeight(150)
transpose() 交换宽度和高度(原地修改) size.transpose()
transposed() -> QSize 返回交换宽高的新尺寸(不修改原对象) new_size = size.transposed()
缩放与约束
scale(s: QSize, mode: Qt.AspectRatioMode) 按比例缩放当前尺寸(原地修改) size.scale(QSize(100,50), Qt.KeepAspectRatio)
scaled(s: QSize, mode: Qt.AspectRatioMode) -> QSize 返回缩放后的新尺寸(不修改原对象) new_size = size.scaled(...)
expandedTo(other: QSize) -> QSize 返回两个尺寸中较大的宽度和高度组成的新尺寸 max_size = size1.expandedTo(size2)
boundedTo(other: QSize) -> QSize 返回两个尺寸中较小的宽度和高度组成的新尺寸 min_size = size1.boundedTo(size2)

缩放模式 (Qt.AspectRatioMode):

  • Qt.IgnoreAspectRatio: 忽略宽高比,直接拉伸到目标尺寸。
  • Qt.KeepAspectRatio: 保持宽高比,缩放到目标尺寸内(默认)。
  • Qt.KeepAspectRatioByExpanding: 保持宽高比,缩放到覆盖目标尺寸。

三、运算符重载

QSize 支持以下运算符:

运算符 说明 示例
+ 尺寸相加(宽度和高度分别相加) size3 = size1 + size2
- 尺寸相减(宽度和高度分别相减) size3 = size1 - size2
* 尺寸乘以标量(宽高均乘) size3 = size1 * 2
/ 尺寸除以标量(宽高均除,整数除法) size3 = size1 / 2
== 判断两个尺寸是否相等 if size1 == size2: ...
!= 判断两个尺寸是否不等 if size1 != size2: ...

四、代码示例
1. 基础操作

python

from PyQt5.QtCore import QSize

# 创建尺寸
size = QSize(800, 600)
print(f"原始尺寸: {size.width()} x {size.height()}")  # 输出: 800 x 600

# 修改尺寸
size.setWidth(1024)
size.setHeight(768)
print(f"修改后: {size.width()} x {size.height()}")    # 输出: 1024 x 768

# 判断有效性
if size.isValid():
    print("尺寸有效")  # 输出: 尺寸有效
2. 缩放应用

python

original = QSize(200, 100)
target = QSize(400, 400)

# 保持宽高比缩放
scaled_size = original.scaled(target, Qt.KeepAspectRatio)
print(f"缩放后: {scaled_size}")  # 输出: PyQt5.QtCore.QSize(400, 200)

# 直接拉伸(忽略宽高比)
scaled_size = original.scaled(target, Qt.IgnoreAspectRatio)
print(f"拉伸后: {scaled_size}")  # 输出: PyQt5.QtCore.QSize(400, 400)
3. 尺寸比较

python

size1 = QSize(100, 200)
size2 = QSize(150, 150)

# 获取最大值和最小值
max_size = size1.expandedTo(size2)   # QSize(150, 200)
min_size = size1.boundedTo(size2)    # QSize(100, 150)

五、应用场景
  • 设置控件大小:与 QWidget.resize() 配合使用。
  • 布局计算:在自定义布局中计算子控件的位置和尺寸。
  • 图像处理:调整图像或绘图区域的大小。
  • 窗口管理:限制窗口的最小或最大尺寸(结合 QWidget.setMinimumSize() 和 setMaximumSize())。

六、注意事项
  • 整数精度QSize 的宽高为整数,若需浮点精度,使用 QSizeF
  • 缩放方法区别scale() 直接修改原对象,而 scaled() 返回新对象。
  • 无效尺寸:避免对无效尺寸(如负值)进行运算,可能导致未定义行为。

通过 QSize,开发者可以高效处理二维尺寸相关的逻辑,适用于 GUI 开发中的大部分尺寸管理需求。

你可能感兴趣的:(#,PyQt5.QtCore,python,开发语言,qt)