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