Qt窗口与界面布局.md 3.0 KB


title: Qt窗口与界面布局 tags:

  • module
  • qt
  • ui
  • joplin type: module source_type: reconstructed created: 2026-04-23 updated: 2026-04-23 ---

Qt窗口与界面布局

[!abstract] 这一模块处理 Qt 界面“怎么组织”的问题,核心包括 [[QMainWindow]]、[[QDialog]]、[[Qt布局管理]]、常用控件以及自定义控件复用。

模块结论

  • 主窗口负责承载菜单栏、工具栏、状态栏和中心区域,是应用骨架。
  • 对话框负责承载短期任务型交互,应明确模态与非模态边界。
  • 布局管理是响应式界面的基础,比绝对坐标更适合长期维护。
  • 常用控件不是孤立 API,而是界面语义的基本构件。

一、QMainWindow 适合做什么

  • 菜单栏
  • 工具栏
  • 状态栏
  • 停靠部件
  • 中心部件

这意味着它最适合作为应用的主框架,而不是用普通 QWidget 手工拼整套主应用结构。

二、QDialog 适合做什么

  • 参数设置
  • 文件选择
  • 确认提示
  • 输入采集
  • 短流程任务

模态与非模态

  • exec():应用级模态
  • open():窗口级模态
  • show():非模态

复习重点

  • 非模态对话框如果是栈对象,函数返回后会立即销毁
  • 堆对象要么设置父对象,要么设置 WA_DeleteOnClose

三、布局管理为什么比绝对定位重要

  • 窗口缩放时能够自动调整
  • 控件关系更清晰
  • 更适合复杂表单和可复用组件

常用布局

  • QHBoxLayout
  • QVBoxLayout
  • QGridLayout

四、常用控件的复习视角

QLabel

  • 显示文本
  • 显示图片
  • 显示动画

QLineEdit

  • 获取与设置输入内容
  • 设置回显模式
  • 设置边距与显示细节

重点不是死记函数名,而是知道“显示型控件”和“输入型控件”分别承担什么职责。

五、自定义控件为什么值得单独注意

  • 当某块界面反复出现时,应抽成独立控件类
  • 在 UI 设计器中可通过“提升”把标准控件替换成自定义控件
  • 这使得 Qt 项目能从“拼页面”走向“组件复用”

六、易错点

  • QWidget 硬做主窗口框架,忽略 QMainWindow 的标准结构。
  • 把所有交互都塞进主窗口,不合理使用对话框。
  • 继续用绝对定位堆控件,导致窗口尺寸变化后界面崩坏。
  • 自定义控件写出来却不接回布局和设计器,复用价值大打折扣。

七、复习提问

  • QMainWindow 和普通 QWidget 的使用边界是什么?
  • 为什么 show() 创建的对话框更容易踩生命周期坑?
  • 布局管理解决的是哪类界面问题?

来源

  • [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/5. QMainWindow.md]]
  • [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/6. 对话框QDialog.md]]
  • [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/7. 布局管理器.md]]
  • [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/8. 常用控件.md]]

相关页面

  • [[Qt]]
  • [[QMainWindow]]
  • [[QDialog]]
  • [[Qt布局管理]]