当前位置:   article > 正文

Qt Model/View 学习(1) - 是什么和为什么?_qt item-based model-based

qt item-based model-based


0. 前言

一直想学一下Qt下的Model/View编程方法,但是搜了一圈CSDN上可能还没有一套比较完整的博客。就想着好好学,啃一啃官方文档,结合自己的理解,开这个Qt Model/View专栏,将自己学习理解的过程记录下来。

本专栏基本上参考官方教程Qt Model/View Programming,也可以在安装的Qt Assistant中搜索Model/View找到官方教程,Qt5以上的版本应该教程区别不会太大。

本文主要探究Qt的Model/View框架到底是什么,它能在什么情况下给我们带来何种便利


1. 初识Model/View

1.1 故弄玄虚

在Qt中最容易看到的关于该框架内容的位置应该在下图,在Qt Creator中编辑界面时的控件,有Model-BasedItem-Based两种。
在这里插入图片描述
我自己的体会是:一般就用下面的Widget了,它的接口理解起来比较简单,也不像上面的View那样,不但运行起来啥也没有,好不容易找到一个setModel()接口,但使用之后一言不合就容易崩溃

这给人一种故弄玄虚的感觉:明明放在很显眼的位置,但使用起来却门槛过高。不是说Qt很容易嘛?

1.2 优越感

另外,在使用Item-Based控件时,官方文档中无时无刻不在提醒着Model-Based控件的高级性

比如官方文档在QListWidget的介绍中写道:如果想要一个更灵活的列表控件,请使用一个带有标准模型的QListView
在这里插入图片描述
又如在QTableWidget的介绍中:如果想使用自己的数据模型,你应该用QTableView而不是本类
在这里插入图片描述
好吧,那么充满高级感的功能,不得学习一下(去装X )?打开官方文档的Model/View Programming教程看一眼,这个篇幅的全英文文档,当场劝退了,直呼“我不配”。
在这里插入图片描述
在这里插入图片描述
在认怂了相当多次,发现了一些可能确实需要使用Model/View框架的场合之后,终于下定决心啃一啃了,来吧。


2. 什么是Model/View

2.1 起源

QtModel/View来源于SmallTalk语言的MVC框架Model-View-Controller,模型-视图-控制器),模型指底层数据的模型,视图指上层表现形式,控制器负责将数据与视图连结,实现数据与视图分开的效果。

数据和视图的分开本质上是工作内容解耦,提升工作效率和专注度,比如前端和后端的分开也是解耦的结果。

MVC提出已经过去几十年了,出现了很多变种,Qt的Model/View也可以看做一种变种,它将视图与控制器结合了,所以只剩下ModelView了。

2.2 初探

官方教程的图片对于这二者的关系描述得再清楚不过了:
在这里插入图片描述
不过看到这个图首先就会有一个疑问:Model不是数据模型吗?怎么还有一个Data?

这或许是一个理解MVC的难点,很多人容易将二者混淆。

Data是代码中具体的数据结构Model是对这些数据的解析方法View根据Model的解析方法来展示视图内容。

此处举一个简单例子帮助理解:
在这里插入图片描述

从这里可以看出来,底层数据可以很散漫,甚至不一定是一维数组,一堆散装变量也没问题,经过Model解析映射以后可以基本看不出原有的样子了,然后View的表现形式可以很丰富,甚至与数据可能看起来毫不相干。

另外,还应该有一个问题:不是说好的Model/View,这个多出来的Delegate是什么鬼?

这个

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/919717
推荐阅读
相关标签