简介
本文是《Qml组件化编程》系列文章的第九篇,涛哥将教大家,Qml中Model和View的知识。
注:文章主要发布在涛哥的博客 和 知乎专栏-涛哥的Qt进阶之路
目录
(放个目录方便大家预览文章。破乎不支持目录,这是从博客复制过来的,点击会跳转到博客)
- 简介
- 界面、数据和逻辑分离
- Qt内置的Model-View
- 整数做model
- 关于delegate
- View与Repeater的区别
- ListModel
- 静态ListModel
- 动态ListModel
- XmlListModel
- ObjectModel
- C++导出Model
- QList<T>
- QJsonArray
- QQmlPropertyMap
- ListView缺失的灵魂
- 搜索与排序
- 选中
- 拖拽
- 特效
界面、数据和逻辑分离
界面架构的理念发展的非常快,主要在Web技术的驱动下,就有这么多架构:
MVC、MVP、 MVVM、 Flux、Redux。
架构太多太复杂,只要抓住一些关键点就够了:界面、数据和逻辑要分别处理,最终要能够正确处理用户输入并显示结果。
来看一下Qt中提供的架构:
![7a3b9617e7f18398469d40e636d596fe.png](https://i-blog.csdnimg.cn/blog_migrate/debcf243102b2f6c2202e29343e874e3.png)
Model代表数据,View代表界面,这个Delegate嘛,就是用来定制View的显示方式和Controll的调用,也应该算进View里面去。
这样看来Qt是M-V架构 ? 其实Qt算是MVC架构,这个Controll一般是自己实现的,和Model放在一起的。
不过Qt有信号/槽机制,在QtQuick中以属性绑定的方式出现。信号/槽相当于Gof设计模式中的观察者模式,也相当于Flux中的订阅/发布模式。
涛哥按自己的实践和理解,画了一个Qt的Model-View架构草图:
![742d0964761e549bbcba09c5e0a5cfc5.png](https://i-blog.csdnimg.cn/blog_migrate/e7cf6c4ef27cfc65e4c4218cb8bb824e.png)
Qt内置的Model-View
View包括 ListView、TableView、TreeView这三种
(ComboBox也可以算作ListView)
![2f79515d1f8eb77d994c1731052729e6.png](https://i-blog.csdnimg.cn/blog_migrate/bf1a8b2cfec308d2f3b507ebbfac0e50.png)
对应的Model包括 ListModel、TableModel、TreeModel