别再死记硬背了!用5个Qt GUI实战案例,彻底搞懂QRect的坐标与边界
每次看到QRect的API文档,是不是总觉得那些坐标参数像天书?明明每个单词都认识,组合起来却不知道在实际项目中该怎么用。今天我们不谈枯燥的理论,直接通过5个你会真实遇到的GUI开发场景,把QRect的边界控制、坐标计算和碰撞检测玩出花来。
1. 自定义按钮:从静态矩形到交互式控件
想象一下,产品经理要求你做一个圆角矩形按钮,点击时要有颜色变化效果。用QRect怎么实现?
首先创建按钮的基本轮廓:
cpp复制QRect buttonRect(20, 20, 120, 50);
QPainterPath path;
path.addRoundedRect(buttonRect, 10, 10);
重点来了——点击检测!很多人会犯的错误是直接用contains()检测鼠标坐标:
cpp复制// 错误示范:忽略了圆角区域
if(buttonRect.contains(event->pos())) {
// 点击处理
}
正确的做法应该考虑圆角矩形的实际点击区域:
cpp复制// 正确做法:使用QPainterPath的contains方法
if(path.contains(event->pos())) {
buttonColor = pressedColor;
} else {
buttonColor = normalColor;
}
update(); // 触发重绘
常见踩坑点:
- 直接使用QRect的边界坐标会忽略自定义形状
- 忘记在鼠标移动事件中也做碰撞检测
- 没有及时调用update()导致界面无响应
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 拖拽选区工具:动态矩形的诞生记
做截图工具时,鼠标拖拽生成选区是最基础的功能。看看QRect如何优雅处理:
cpp复制// 鼠标按下时记录起点
void startSelection(const QPoint &pos) {
selection.setTopLeft(pos);
selection.setBottomRight(pos); // 初始化为0大小矩形
}
// 鼠标移动时更新选区
void updateSelection(const
