Model/View编程介绍
QT4发展了一系列的视图类,这些视图类用Model/View模型来管理数据和显示方式之间的关系。这种架构带来的功能分离特性使得开发者能够更灵活的自定义数据的显示方式,而且它所提供的标准模式接口使我们在这个既有的视图中能够使用多种组织形式的数据。在这篇文章里,我们简要介绍一下Model/View模型,将涉及到的相关概念列出一个大纲,并且描述一下各种view的结构。在这个架构中的每一部分都会有相应的解释和列子来帮助理解如何使用这些类。
Model/View结构
Model-View-Controller(MVC)是一种来自于Smalltalk的设计模式,常被用于构建用户接口程序。在《设计模式》一书中,Gamma et al.写到:
“MVC包含三个部分。Model是应用对象,View是视图显示,而Controoler定义了用户接口对于用户输入如何反应。在MVC提出之前,用户接口设计倾向于将这三部分揉合到一起。MVC架构对其进行了解耦从而提升了灵活性和可复用性。”
如果将View和Controller结合起来,就是Model/View模型。这个架构仍然可以将数据显示和数据存储分离开来,但是却使得结构更加简单明了。这种分离使得在不同视图中显示同一组数据成为可能,并且在完成视图的同时能够不改变数据的存储结构。为了灵活的处理数据输入,我们介绍delegate的概念。在这个架构中引入delegate的好处就是它允许自定义的编辑数据。
Model取得数据,它提供了一个和其它组件的接口。通讯的方式取决于数据的来源和model实现的方式。
View通过model来获取modelindexes:model indexes可以指向数据源。通过向model提供model indexes,view可以获取数据源的数据。
在标准view中,代理类修改数据项。当某个数据项被编辑时,delegate用model indexes直接和model进行通信。
Model,view和delegata通过信号槽机制相互通信:
如果数据发生更新,来自于model的信号通知view。
如果用户编辑更新数据项,来自于view的信号通知delegate。
如果处于数据项编辑中,来自于delegate 的信号通知model和view关于编辑器的状态。