--- title: Qt事件绘图与文件系统 tags: - module - qt - event - paint - joplin type: module source_type: reconstructed created: 2026-04-23 updated: 2026-04-23 --- # Qt事件绘图与文件系统 > [!abstract] > 这一模块处理 Qt 程序“怎么从静态界面变成完整应用”的问题,核心包括事件分发、绘图设备、画家模型和文件系统接口。 ## 模块结论 - Qt 的交互核心不只在信号槽,还在统一的事件分发模型。 - 绘图通常通过 `QPainter` 在特定设备上完成,设备与绘图逻辑要区分开。 - `QPixmap`、`QImage`、`QPicture` 等类型服务于不同的绘图和存储场景。 - 文件系统接口让 Qt 应用能稳定处理文本、目录和外部数据。 ## 一、事件机制的主线 - 系统或用户产生事件 - Qt 事件循环接收事件 - 事件分发给对应对象 - 对象通过 `event()` 或具体事件处理函数响应 ### 复习重点 - 事件循环是总入口 - 具体控件往往通过重写对应事件函数定制行为 - 信号槽偏“语义触发”,事件机制偏“底层输入与分发” ## 二、什么时候该想到事件机制 - 鼠标点击、移动、进入离开 - 键盘输入 - 窗口大小变化 - 绘制请求 如果问题是“底层输入怎么到控件”,先想事件;如果问题是“动作发生后谁来处理业务”,再想信号槽。 ## 三、绘图系统怎样理解 - `QPainter`:谁来画 - `QPaintDevice`:画到哪 - `QPen` / `QBrush`:怎么画 ### 常见绘图设备 - `QWidget` - `QPixmap` - `QImage` - `QPicture` ### 记忆方法 - `QPixmap` 更偏界面显示 - `QImage` 更偏像素级处理 - `QPicture` 更像绘图指令记录 ## 四、文件系统的作用 - 读写文本文件 - 访问目录和路径 - 配合资源系统或外部文件完成应用数据管理 Qt 在这里提供统一风格 API,降低跨平台路径处理差异。 ## 五、资源与外部文件的边界 - 稳定静态资源:更适合放进 `qrc` - 用户数据、配置和外部文档:更适合走文件系统 这个区分对于桌面应用很重要。否则代码里会混淆“程序自带资源”和“运行期数据”。 ## 六、易错点 - 把所有交互都抽成信号槽,不区分事件层与语义层。 - 在错误的设备类型上做不合适的绘图处理。 - 不区分资源内嵌路径和外部文件路径。 - 文件系统操作只记类名,不理解它在应用数据流中的位置。 ## 七、复习提问 - 事件机制和信号槽分别更适合处理哪类问题? - `QPainter` 与绘图设备之间是什么关系? - 哪些资源应内嵌到 `qrc`,哪些应保留为外部文件? ## 来源 - [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/9. Qt消息机制和事件.md]] - [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/10 绘图和绘图设备.md]] - [[raw/Joplin/编程学习项目/使用Qt和C++构造UI界面/11 文件系统.md]] ## 相关页面 - [[Qt]] - [[Qt事件机制]] - [[QPainter]] - [[Qt文件系统]]