模型视图介绍
模型视图架构
使用模型和视图
Qt中包含的两个模型
以已有的模型使用视图
模型类
基本概念
使用模型索引
延伸阅读
视图类
基本概念
使用现存视图
项选择处理
委托类
使用现存的委托
一个简单的委托
视图项的选中处理
概念
使用一个选择模型
创建一个新模型
模型/视图间功能的分离允许利用现有视图创建模型。该方式让我们能从多种使用标准GUI组件的数据源中展示数据,如QListView,QTableView,和QTreeView。
QAbstractItemModel提供了一个接口,它在层次结构中整理信息足够灵活,允许数据插入,删除,修改,或以某种方式排序的可能性。它还提供了支持拖拽操作。
QAbstractListModel和QAbstractTableModel类提供支持简单非层次数据结构的接口,对简单的list和table models,更容易作为起始点使用。
在本节中,我们创建一个简单的只读模型探索模型/视图的体系结构的基本原理。在后续章节里,我们改编这个简单的模型,这样项可以被用户修改。
更复杂的模型类子,可参考简单树模型的例子。
更多QAbstractItemModel子类化的要求描述参考模型子类化文档章节。
设计模型
当对现有的数据结构创建一个新的模型时,考虑使用哪种类型的模型提供接口来映射数据是很重要的。如果数据结构可以表示为一个列表或表的项,你可以子类QAbstractListModel或QAbstractTableModel,因为这些类提供许多功能合适的默认实现。
然而,如果底层数据结构只能由分层树结构表示,有必要子类化QAbstractItemModel。这种方法在简单树模型的例子中被使用。
在本节中,我们实现一个基于一个字符串列表的简单模型,所以QAbstractListModel提供了理想的基类用于构建。
无论底层数据结构采取何种形式,在特化的模型中添加标准QAbstractItemModel API通常是一个好主意,可以更自然地访问底层数据结构。这使它更易于以数据填充模型,但仍然使其他通用模型/视图组件与它使用标准的API进行交互。下面描述的模型为此提供了一个自定义构造函数。