赞
踩
一直想学一下Qt下的Model/View
编程方法,但是搜了一圈CSDN
上可能还没有一套比较完整的博客。就想着好好学,啃一啃官方文档,结合自己的理解,开这个Qt Model/View专栏,将自己学习理解的过程记录下来。
本专栏基本上参考官方教程Qt Model/View Programming,也可以在安装的Qt Assistant
中搜索Model/View
找到官方教程,Qt5以上的版本应该教程区别不会太大。
本文主要探究Qt的Model/View
框架到底是什么,它能在什么情况下给我们带来何种便利。
在Qt中最容易看到的关于该框架内容的位置应该在下图,在Qt Creator
中编辑界面时的控件,有Model-Based
和Item-Based
两种。
我自己的体会是:一般就用下面的Widget
了,它的接口理解起来比较简单,也不像上面的View
那样,不但运行起来啥也没有,好不容易找到一个setModel()
接口,但使用之后一言不合就容易崩溃。
这给人一种故弄玄虚的感觉:明明放在很显眼的位置,但使用起来却门槛过高。不是说Qt很容易嘛?
另外,在使用Item-Based
控件时,官方文档中无时无刻不在提醒着Model-Based
控件的高级性:
比如官方文档在QListWidget
的介绍中写道:如果想要一个更灵活的列表控件,请使用一个带有标准模型的QListView
。
又如在QTableWidget
的介绍中:如果想使用自己的数据模型,你应该用QTableView
而不是本类。
好吧,那么充满高级感的功能,不得学习一下(去装X )?打开官方文档的Model/View Programming
教程看一眼,这个篇幅的全英文文档,当场劝退了,直呼“我不配”。
在认怂了相当多次,发现了一些可能确实需要使用Model/View
框架的场合之后,终于下定决心啃一啃了,来吧。
Qt
的Model/View
来源于SmallTalk
语言的MVC框架(Model-View-Controller
,模型-视图-控制器),模型指底层数据的模型,视图指上层表现形式,控制器负责将数据与视图连结,实现数据与视图分开的效果。
数据和视图的分开本质上是工作内容解耦,提升工作效率和专注度,比如前端和后端的分开也是解耦的结果。
MVC
提出已经过去几十年了,出现了很多变种,Qt的Model/View
也可以看做一种变种,它将视图与控制器结合了,所以只剩下Model
和View
了。
官方教程的图片对于这二者的关系描述得再清楚不过了:
不过看到这个图首先就会有一个疑问:Model不是数据模型吗?怎么还有一个Data?
这或许是一个理解MVC的难点,很多人容易将二者混淆。
Data
是代码中具体的数据结构,Model
是对这些数据的解析方法,View
根据Model
的解析方法来展示视图内容。
此处举一个简单例子帮助理解:
从这里可以看出来,底层数据可以很散漫,甚至不一定是一维数组,一堆散装变量也没问题,经过
Model
解析映射以后可以基本看不出原有的样子了,然后View
的表现形式可以很丰富,甚至与数据可能看起来毫不相干。
另外,还应该有一个问题:不是说好的Model/View,这个多出来的Delegate是什么鬼?
这个
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。