qt无标题栏无边框 拖动 改变窗体大小完美实现



在Qt框架下,创建一个没有标题栏和边框的窗口是一项常见的需求,这通常用于自定义界面设计或者创建更简洁的用户体验。这个“qt无标题栏无边框 拖动 改变窗体大小完美实现”的主题涉及到几个关键的技术点,我们将详细探讨这些知识点。 1. **无标题栏与无边框窗口**: 在Qt中,我们可以通过设置`QWidget`或`QMainWindow`的窗口 flags 来实现这一效果。使用`setWindowFlags()`函数,将默认的窗口标志修改为去除标题栏和边框。例如,你可以使用`Qt::FramelessWindowHint`来去掉边框,`Qt::WindowSystemMenuHint`禁用系统菜单,`Qt::WindowMinMaxButtonsHint`禁用最小化和最大化按钮。 ```cpp setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint); ``` 2. **拖动窗体**: 由于去掉了标题栏,用户无法像常规窗口那样通过拖动标题来移动窗口。因此,我们需要实现自定义的拖动机制。通常是在窗口的鼠标按下事件(`mousePressEvent`)中记录鼠标的点击位置,然后在鼠标移动事件(`mouseMoveEvent`)中根据鼠标的移动更新窗口的位置。 ```cpp void MyWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { m_DragPosition = event->globalPos() - pos(); } } void MyWidget::mouseMoveEvent(QMouseEvent *event) { if (event->buttons().testFlag(Qt::LeftButton)) { move(event->globalPos() - m_DragPosition); } } ``` 3. **改变窗体大小**: 无边框窗口通常不提供内置的大小调整功能,所以需要自定义。可以监听鼠标的按下、移动和释放事件,当鼠标在窗口边缘附近时,允许用户进行窗口大小调整。这涉及到计算鼠标位置和窗口边界的关系,以及在移动事件中动态调整窗口尺寸。 ```cpp bool resizing = false; Qt::Edge resizingEdge; void MyWidget::mousePressEvent(QMouseEvent *event) { // 检查鼠标位置,确定是否开始调整大小 resizingEdge = edgeAt(event->pos()); if (resizingEdge != Qt::NoEdge) { resizing = true; m_OriginalSize = size(); } } void MyWidget::mouseMoveEvent(QMouseEvent *event) { if (resizing) { int dx = event->x() - m_OriginalSize.width(); int dy = event->y() - m_OriginalSize.height(); // 根据选择的边缘调整大小 switch (resizingEdge) { case Qt::TopEdge: setGeometry(x(), y() + dy, width(), m_OriginalSize.height() - dy); break; case Qt::BottomEdge: setGeometry(x(), y(), width(), m_OriginalSize.height() + dy); break; // ... 其他边缘处理 } } } void MyWidget::mouseReleaseEvent(QMouseEvent *) { resizing = false; } ``` 4. **事件过滤器**: 为了确保窗口在失去焦点后仍然能响应鼠标事件,可能需要为窗口添加事件过滤器,捕获所有级别的鼠标事件。 5. **系统集成**: 虽然我们移除了系统的最大化、最小化按钮,但有时还需要保留这些功能。这可以通过重写`QWidget::nativeEvent()`函数,处理Windows或X11的系统消息来实现。 以上是实现“qt无标题栏无边框 拖动 改变窗体大小”的核心技术要点。实际应用中,还需要考虑更多的细节,比如处理窗口状态的变化、保持窗口比例、防止窗口大小超出屏幕等。通过理解并掌握这些知识,你可以构建出更加灵活且符合用户习惯的自定义窗口应用。













































- 1

- qq_309005772022-09-19简单明了,可用
- q3061913202019-04-11快速拉伸有白窄带闪烁

- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 第八篇范本格式和程序.doc
- 安全教育计划制度.doc
- 壁挂炉与其他采暖方式费用对比分析.doc
- 中国区块链技术发展及应用研究.docx
- STM32F0内核介绍.pdf
- 大卸料平台技术交底.doc
- 福建某医院病房楼施工组织设计(5层-框剪结构).doc
- 幼儿园数学活动教案.doc
- 微机原理与接口技术漆强版第1章微型计算机系统概述.ppt
- 模板、拱架及支架安装质量检查记录表.doc
- 大数据背景下孤儿学生化学学科课前预习习惯培养的研究.docx
- STM32L4四线串行外设接口模块(QSPI)介绍.pdf
- 钢结构专业分包制作招标文件.doc
- AUTOCAD绘制道路工程图的方法和实例.doc
- 标准化法实施条例.docx
- 郑州某房地产开发项目风险分析.doc


