QT中的模型视图架构(设计)模式

模型视图设计模式最开始是源于桌面开发领域,在桌面开发领域取得了很大的成功之后,又被运用到web开发领域。QT中的模型视图设计模式是从传统的MVC设计演变而来的。

模型视图设计模式提出的背景:

数据的处理和数据的显示本来就没有什么关系,随着软件行业的发展,很多产品到了后期简直无法维护了。因为程序员们有了更多的编程*,把数据处理和数据显示的逻辑放在一起,那么数据的处理和数据显示的逻辑,这样混在一起,到了后期简直无法修改了。后来就有人提出数据的处理和数据的显示相分开,他们之间本来就没有很多联系,他们之间是弱耦合的关系。这个就是模型视图设计模式的提出背景。

首先,我们来看一下模型视图设计模式的核心思想

1.模型(数据)与视图(显示)相分离

2.模型对外提供标准接口存储数据(不关心数据如何显示)

3.视图自定义数据的显示方式(不关心数据如何组织存储)

                                  QT中的模型视图架构(设计)模式

用一种比较直观的理解来理解一下模式视图设计模式:

模型用来组织数据的,那么模型用来组织的这些数据,拿来干嘛呢?是不是把数据放在内存里面呢?当然不是的,放在内存里面谁知道呢?数据肯定是要被呈现出来的,那么为了更好的将数据呈现出来,我们就需要视图,视图就需要从模型这里拿到数据,并且以自己的方式显示出来。这个就是模型视图设计模式的直观的理解。

模型视图模式的工作机制

1.当模型里组织的数据发生改变时,模型发出信号通知视图。当模型里面组织的数据发生变化的时候,这个时候视图要呈现不同的数据,那么呈现的方式肯定要发生变化。

2.当用户与视图进行交互的时候,视图给模型发出信号提供交互信息。当视图上所显示的数据被用户改变了,这个时候视图肯定也会通知模型,模型是否要改变数据的组织方式。

在QT中直接支持模型和视图的概念,是以类和对象的方式来组织模型和视图的。

                                     QT中的模型视图架构(设计)模式

                                                                        QT中的模型类

                                              QT中的模型视图架构(设计)模式

                                                                      QT中的视图类

在QT中,对于同一个模型的中组织的数据,可以有多个不同视图的呈现。那么模型如何为数据提供统一的访问方式呢?

不管模型是以什么数据结构来组织数据,都必须为每一个数据提供一个独一无二的索引,视图通过索引来访问模型中的具体数据。