收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
+ - [3.1 TreeView](#31_TreeView_388)
- [3.2 处理选择](#32__448)
- [3.3 预定义的模型](#33__531)
- [3.4 委托](#34__544)
- [3.5 ModelTest和调式](#35_ModelTest_577)
- [3.5 ModelTest和调式](#35_ModelTest_588)
每个UI开发者都应该要知道
模型/视图(Model/View)编程,本教程提供了一个关于该话题的一个易于理解的引导。
表格,列表和树widget是在GUI编程中频繁使用的组件。这些widget有两种不同的方式去访问它们的数据。传统的方式是使用内部存有数据的widget,这种方式非常直观,但是在许多特殊的应用程序中,它会导致数据同步问题。第二种方式是模型/视图编程,widget内部不包含存放数据的容器,这些widget通过一个标准的接口去访问外部数据,因此避免了数据冗余。这看起来似乎很复杂,但是一旦你深入研究,它不但易于掌握,而且模型/视图编程的许多好处都将慢慢呈现。
在这个过程中,我们将学习一些Qt的基本技术,例如:
- 标准widget和模型/视图widget之间的差异
- 表单和模型之间的适配器
- 开发一个简单的模型/视图应用程序
- 预定义的模型
- 进阶话题例如:
- 树视图
- 选择
- 委托
- 模块测试调试
你也将学习到,你的应用程序能否采用模型/视图编程简化开发,是否传统的widget将工作地更好。
这个教程为你提供了示例代码,让你能够编辑和集成它们到你的项目中。这个教程地源代码位于Qt目录下的examples/widgets/tutorials/modelview。
获取更多有关模型/视图编程的详细信息,请参考reference documentation。
1. 引入
模型/视图是一个技术,用于将数据和视图分离。标准的widget不被设计为数据和视图分离,这也是Qt有两种不同类型的widget的原因。两种类型的widget看上去是相同的,但是它们和数据的交互方式不同。
标准的widget数据是widget的一部分 | img |
---|---|
视图类操作外部数据(模型) | img |
1.1 标准widget
让我们深入了解一下标准的表格widget。一个表格widget是一个数据元素的2维数组,用户可以更改这些数据元素。通过读写表格widget中的数据元素,表格widget可以集成到程序流中。这种方式非常直观并且在许多应用程序中都是有用的,但是,通过一个标准的表格widget显示和编辑一个数据库表,会造成一些问题。两份数据的拷贝需要被协调:一份在widget外部;另一份在widget内部。开发者需要同步这两个版本。除此之外,数据的呈现和数据的紧密耦合使得编写单元测试更加困难。
1.2 模型/视图提供解决方案
模型/视图使用了一种更加优雅的方式提供了解决方案。模型/视图消除了在标准widget上的数据一致性问题。模型/视图也让,同时使用多个相同数据的视图,使用起来更简单,因为一个模型可以被传递给许多视图。最重要的差异是模型/视图widget不存储数据。事实上,它们直接操作你的数据。由于视图类不知道你的数据结构,所以你需要提供一个包装器,让你的数据满足QAbstractItemModel接口的要求。一个视图使用这些接口去读写你的数据。任何实现的QAbstractItemModel接口的类的对象,都被成为模型。一旦视图接收到了一个指向模型的指针,视图将读取和显示模型的内容,并成为模型的编辑器。
1.3 模型/视图widget概览
这是一个模型/视图widget和它们相对应的标准widget的概览
Widget | 标准widget | 模型/视图的视图类 |
---|---|---|
img | QListWidget | QListView |
img | QTableWidget | QTableView |
img | QTreeWidget | QTreeView |
img | QColumnView 展示树层级结构的列表 | |
img | QComboBox 可以以视图类或传统widget工作 |
1.4 在表单和模型间使用适配器
收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人
都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!