--- 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布局管理]]