Tiled源码分析(二): 多文档支持
来源:互联网 发布:福州哪里收淘宝模特 编辑:程序博客网 时间:2024/06/06 03:52
文档模型
文档对象是一个MapDocument类, 它的主要功能有:
- 管理编辑操作的signal的派发, 保证一些UI的状态可以正确地更新
- 管理地图的数据模型, 如layer model(Qt MVC结构中的model, 可以绑定到控件)
- 增加删除地图对象的操作接口
- 管理这个地图的undo堆栈(后续专门分析一下undo/redo)
- 管理地图编辑时的选中状态
- 持有一个QTabWidget, 这个控件就是MainWindow的center widget, 所一直是最大化居中显示的
- 持有一个QUndoGroup, 因为每个MapDocument都有一个QUndoStack, 所以算是一个undo管理器(Qt这点很人性化, 常用功能都封装好了)
- 管理当前文档, 以及切换状态. 每当当前文档变化时, 都会发出一个currentDocumentChanged的signal
文档操作
不管什么编辑器, 针对文档的操作就这么几种, 看看所有编辑器工具栏上那万年不变的前几个图标就知道了.
新建
先弹出NewMapDialog, 确定各种参数后就会生成一个MapDocument对象
让人意外的是MapDocument是NewMapDialog创建的, 而不是DocumentManager
估计这么做的原因是参数太多, 私有访问比较方便吧?
然后调用DocumentManager::addDocument把文档加入管理器, 同时创建显示需要的一些东西, 并绑定事件
打开
在读取之前, 会先查询一下插件管理器, 看看有没有可以读文件的插件
如果选择的文件已经打开, 则直接切换到那个文档, 不再打开新的
读完文件后就有了Map对象, 创建出MapDocument, 剩下的流程就跟新建一样addDocument就行了
关闭
关闭之前需要确认保存, 而需不需要保存则是看QUndoStack是不是空的(跟我之前YY的一样)
DocumentManager干的事就是删除Tab, 释放显示对象和MapDocument对象
保存
如果没有名字, 就换成"另存为"的操作流程
保存的时候同样也要扫描插件看扩展的格式writer
保存完的话就要把文档对应的QUndoStack标记空了, 这样就不会出现没有修改重复保存的情况
最后就把文件加入"recent file"
最近打开文件记录
这个打开记录是保存在QSettings里的, 在编辑器下次启动时也会还原打开的文件
QSettings是个之前没用过的东西, 可以保存各种选项, 而且还不用操作保存/读取, 挺实用的
总结
这么看下来多文档模型还是挺清晰的, 最重要的是管理好状态切换
- Tiled源码分析(二): 多文档支持
- Tiled源码分析: 序
- Tiled源码分析(三): Undo/Redo实现
- Tiled源码分析(四): 插件机制
- Tiled源码分析(一): GUI编辑和布局
- Tiled Map Editor(二)
- Tiled Map Editor(二)
- Tiled Map Editor(二)
- Tiled地图文件分析
- lua源码分析文档
- Tiled Backing Store (二)
- libgdx Tiled 实例分析(中)
- android多线程支持源码分析
- Tiled
- Flume NG源码分析(二)支持运行时动态修改配置的配置模块
- Mangos源码分析(二)
- ConcurrentHashMap 源码分析 (二)
- Notepad++源码分析(二)
- 怎么隐藏你指定的进程
- 系统垃圾清理bat文件
- lag lead 学习
- Qt Creator使用体会与小技巧
- JQuery 入门指南(4):添加删除元素
- Tiled源码分析(二): 多文档支持
- Windows/Linux下C/C++内存泄露检测工具
- 学习网站收集
- 单链表逆置
- 数据结构实验之栈和队列
- 关于QT中显示中文的一些研究
- 算法之计算 整数乘法
- 数据库的一些基础研究和性能探讨(触发器)
- HTTP协议详解