文档模型
文档对象是一个MapDocument类, 它的主要功能有:
- 管理编辑操作的signal的派发, 保证一些UI的状态可以正确地更新
- 管理地图的数据模型, 如layer model(Qt MVC结构中的model, 可以绑定到控件)
- 增加删除地图对象的操作接口
- 管理这个地图的undo堆栈(后续专门分析一下undo/redo)
- 管理地图编辑时的选中状态
然后就是DocumentManager, 是一个单件类, 用于管理打开的所有MapDocument, 看看它都有些什么:
- 持有一个QTabWidget, 这个控件就是MainWindow的center widget, 所一直是最大化居中显示的
- 持有一个QUndoGroup, 因为每个MapDocument都有一个QUndoStack, 所以算是一个undo管理器(Qt这点很人性化, 常用功能都封装好了)
- 管理当前文档, 以及切换状态. 每当当前文档变化时, 都会发出一个currentDocumentChanged的signal
文档操作
不管什么编辑器, 针对文档的操作就这么几种, 看看所有编辑器工具栏上那万年不变的前几个图标就知道了.