由于最近做的一个程序需要用一个视图显示所定义的数据,翻了下Qt的widget,有QTreeWidget,QTableWidget,QListWidget。但是这些widget内部包含了存储这些数据的container,也就是说用户产生的数据为了能够以列表或者树目录的形式显示出来,必须将其拷贝一份。这就造成了数据的冗余,对于数据不是很多的情况牺牲一点点空间也无妨,但是对于数据库等大型数据来讲,这便是无法原谅的了。
翻了翻Qt 的帮助文档,Qt提供了一个框架完美得解决了这个问题:Model/View Programming。这种方法采用了将视图和数据分离的策略,视图只负责显示,不提供数据存储,而model中存储了自定义的数据,这样仅一份数据可以在多个视图中显示。这个思想类似于C++中容器和算法,一个存储数据,一个使用数据,它们之间的接口就是遍历器。
本文算是学习笔记,网上的帮助文档加上自己实践花了1个多星期,在此总结一下。