文章目录
 - 一、构造与初始化方法
- 二、坐标与尺寸获取
- 三、坐标与尺寸设置
- 四、几何运算方法
- 五、移动与调整方法
- 六、状态判断方法
- 七、类型转换方法
- 八、操作符重载
- 九、静态方法
- 十、特殊方法
- 附录
-  
  
 
📘 PySide6.QtCore.QRect 使用整数精度定义平面矩形区域,其官方文档参考这里。
 
 
一、构造与初始化方法
 
| 方法签名 | 说明 | 
|---|
| QRect() | 构造空矩形(宽高为0) | 
| QRect(x: int, y: int, width: int, height: int) | 通过坐标和尺寸构造 | 
| QRect(topLeft: QPoint, size: QSize) | 通过顶点和尺寸构造 | 
| QRect(topLeft: QPoint, bottomRight: QPoint) | 通过对角点构造(不推荐) | 
 
null_rect = QRect()
rect1 = QRect(10, 20, 300, 400)
rect2 = QRect(QPoint(10, 20), QSize(300, 400))
 
 
二、坐标与尺寸获取
 
| 方法 | 返回值 | 说明 | 
|---|
| left() | int | 左边界x坐标 | 
| top() | int | 上边界y坐标 | 
| right() | int | 右边界x坐标(含历史原因带来的偏移: left() + width() - 1) | 
| bottom() | int | 下边界y坐标(含历史偏移: top() + height() - 1) | 
| width() | int | 实际宽度(可能负数) | 
| height() | int | 实际高度(可能负数) | 
| topLeft() | QPoint | 左上角坐标 | 
| bottomRight() | QPoint | 右下角坐标(含偏移) | 
| center() | QPoint | 中心点坐标 | 
| size() | QSize | 尺寸对象 | 
 
rect = QRect(10, 20, 30, 40)
print(rect.right())   
print(rect.size())    
print(rect.top())     
print(rect.width())     
print(rect.height())    
print(rect.x())         
print(rect.y())         
print(rect.bottom())    
print(rect.left())      
 
 
三、坐标与尺寸设置
 
| 方法 | 参数 | 说明 | 
|---|
| setLeft(x: int) | 新左边界 | 保持右边界不变 | 
| setRight(x: int) | 新右边界 | 改变宽度 | 
| setTop(y: int) | 新上边界 | 保持下边界不变 | 
| setBottom(y: int) | 新下边界 | 改变高度 | 
| setTopLeft(p: QPoint) | 新顶点 | 改变位置,保持右下 | 
| setBottomRight(p: QPoint) | 新对角点 | 改变尺寸 | 
| setWidth(w: int) | 新宽度 | 右边界自动计算 | 
| setHeight(h: int) | 新高度 | 下边界自动计算 | 
| setSize(s: QSize) | 新尺寸 | 保持左上角不变 | 
| setCoords(x1: int, y1: int, x2: int, y2: int) | 四坐标 | 直接设置四个边界 | 
| setRect(x: int, y: int, w: int, h: int) | 坐标+尺寸 | 重置整个矩形 | 
 
rect = QRect(10, 20, 30, 40)
rect.setRight(50)      
rect.setSize(QSize(20, 60))  
 
 
四、几何运算方法
 
| 方法 | 返回值 | 说明 | 
|---|
| contains(QPoint) | bool | 点是否在矩形内 | 
| contains(QRect) | bool | 是否完全包含另一矩形 | 
| intersects(QRect) | bool | 是否有重叠区域 | 
| intersected(QRect) | QRect | 返回交集区域 | 
| united(QRect) | QRect | 返回并集区域 | 
| adjusted(dx1: int, dy1: int, dx2: int, dy2: int) | QRect | 调整边界后的新矩形 | 
| normalized() | QRect | 标准化后的正尺寸矩形 | 
 
rect_a = QRect(0, 0, 100, 100)
rect_b = QRect(50, 50, 100, 100)print(rect_a.intersected(rect_b))  
print(rect_a.contains(QPoint(30,30)))  
 
 
五、移动与调整方法
 
| 方法 | 参数 | 说明 | 
|---|
| translate(dx: int, dy: int) | 偏移量 | 相对移动 | 
| translated(dx: int, dy: int) | 偏移量 | 返回移动后的新矩形 | 
| moveTo(x: int, y: int) | 新坐标 | 绝对移动左上角 | 
| moveTopLeft(p: QPoint) | 新顶点 | 移动左上角 | 
| adjust(dx1: int, dy1: int, dx2: int, dy2: int) | 调整量 | 直接修改边界 | 
| marginsAdded(QMargins) | 边距 | 增加外边距后的新矩形 | 
| marginsRemoved(QMargins) | 边距 | 移除外边距后的新矩形 | 
 
rect = QRect(10, 20, 30, 40)
rect.translate(5, -5)  
new_rect = rect.translated(0, 10)  
new_rect.moveTo(0, 0)   
 
 
六、状态判断方法
 
| 方法 | 返回值 | 说明 | 
|---|
| isEmpty() | bool | 是否面积为零(允许负尺寸) | 
| isNull() | bool | 是否宽高均为0 | 
| isValid() | bool | 是否满足 left<=right 且 top<=bottom | 
 
rect1 = QRect(10,10,-5,20)
print(rect1.isEmpty())  
print(rect1.isValid())   rect2 = QRect()
print(rect2.isNull())    
 
 
七、类型转换方法
 
| 方法 | 返回值 | 说明 | 
|---|
| toRectF() | QRectF | 转为浮点矩形 | 
| getCoords() | (x1, y1, x2, y2) | 获取四个边界坐标 | 
| getRect() | (x, y, w, h) | 获取左上坐标和尺寸 | 
 
rect = QRect(10, 20, 30, 40)
print(rect.getCoords())  
print(rect.toRectF())    
 
 
八、操作符重载
 
| 操作符 | 等效方法 | 说明 | 
|---|
| & | intersected() | 交集运算 | 
| | | united() | 并集运算 | 
| += | marginsAdded() | 增加边距 | 
| -= | marginsRemoved() | 移除边距 | 
| == | 坐标相等判断 | 完全一致 | 
| - | 差集运算 | 返回缩小后的矩形 | 
 
rect1 = QRect(0,0,100,100)
rect2 = QRect(50,50,100,100)
print(rect1 & rect2)  
print(rect1 | rect2)  
 
 
九、静态方法
 
| 方法 | 说明 | 
|---|
| span(p1: QPoint, p2: QPoint) | 创建包含两点的最小矩形 | 
 
p1 = QPoint(10, 20)
p2 = QPoint(50, 60)
span_rect = QRect.span(p1, p2)  
 
 
十、特殊方法
 
| 方法 | 说明 | 
|---|
| __reduce__() | 序列化支持 | 
| __repr__() | 字符串表示 | 
| transposed() | 宽高交换后的新矩形 | 
 
rect = QRect(10, 20, 30, 40)
print(rect.transposed())  
 
 
附录
 
方法速查表
 
| 类别 | 方法 | 
|---|
| 构造 | QRect(),QRect(x,y,w,h),QRect(QPoint,QSize) | 
| 坐标获取 | left(),right(),top(),bottom(),topLeft(),bottomRight(),center() | 
| 尺寸获取 | width(),height(),size() | 
| 坐标设置 | setLeft(),setRight(),setTop(),setBottom(),setTopLeft(),setBottomRight() | 
| 尺寸设置 | setWidth(),setHeight(),setSize(),setCoords(),setRect() | 
| 几何运算 | contains(),intersects(),intersected(),united(),adjusted(),normalized() | 
| 移动调整 | translate(),translated(),moveTo(),adjust(),marginsAdded(),marginsRemoved() | 
| 状态判断 | isEmpty(),isNull(),isValid() | 
| 类型转换 | toRectF(),getCoords(),getRect() | 
| 操作符 | &,|,+=,-=,==,- | 
| 特殊方法 | transposed(),span() | 
 
 
注意的问题
 
实际开发中需特别注意:
 
- 历史坐标偏移问题(right/bottom返回值)
- 负尺寸需用normalized()标准化
- 移动与调整方法的原地修改与返回新对象的区别
- 有效性验证应在几何运算前完成
交集和并集图解
 
- intersect
  
- united
 