背景
一个应用程序本质可以抽象为三部分:界面、逻辑处理、数据。程序中存储有大量的数据,经过逻辑处理后、通过界面展示给用户,同时用户可以通过界面对数据进行编辑,如下图所示:
Qt 中的模型视图架构就是用来实现大量数据的存储、处理及其显示的,这种架构引入的功能分离思想为开发者定制项目的显示提供了高度的灵活性。
Model/View 架构
Model/View 架构的主要目的是将数据的存储与显示分离,可以分为三部分:模型、视图和委托,如下图所示:
①.Model 模型:对外提供标准的数据解析、存储接口,不关心数据如何显示。
②.View 视图:从 Model 中遍历读取元素进行绘制,不关心数据如何组织存储。
③.Delegate 委托:在视图基础上可以自定义特殊的显示和编辑效果。
Model/View 原理
Model/View 的核心在于 Model 部分,如下图所示:
①.Model 的本质是对内存数据的解析方法,对内存数据进行索引,提供标准的数据存取接口。
②.在给视图指定模型后,视图通过索引从模型中自动获取和渲染数据。
③.Qt 中提供的 View 相关的类已经是封装完备的类,一般无需改动。
视图中不存储数据,用户可以通过视图直接操作内存数据。若采用标准显示控件进行数据显示,则需要同时维护两份数据,如下面所示:
Model/View 使用总结
Model/View 架构有以下优点:
①.数据和显示分离,一般对其中一方进行修改对另一方的影响很小。
②.多个视图可以同时设定为同一个模型。
③.View 部分一般可以直接使用 Qt 提供的控件,无需自行修改,减少代码量。
Model/View 架构具有诸多优点,但是代码编写没有一成不变之定则,一般以快捷、实用为准则,在一些简单的场景中使用标准数据显示控件就很方便,就没必要再定义 Model 了。