不二如是 发表于 2016-12-6 11:18:27

161 -创建只读模型(QAbstractListModel)

本帖最后由 不二如是 于 2016-12-17 10:54 编辑



在160我们把QFileSystemModel和QStandardItemModel两个模型介绍完了。

这一帖创建一个新的模型来探索模型/视图架构的基本准则!

当要为已经存在的数据结构创建一个新的模型,需要考虑使用哪种类型的模型来为数据提供接口。

如果数据结构可以表示为项目列表或者表格,那么可以子类化QAbstractListModel或者QAbstractTableModel

因为他们为很多功能提供了非常合适的默认实现。

但是,如果底层数据结构只能表示为具有层次的树结构,那么必须子类化QAbstractItemModel。

下面的例子,先创建一个字符串列表的只读模型。

以QAbstractListModel作为基类,然后添加编辑、插入行、删除行功能。

好了,上程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

创建空的Qt项目,添加C++类


修改头文件:


实现一个简单的、非层次结构、只读的数据模型,基于QStringListModel类。

该模型使用QStringList作为内部数据源,很简单,因为QAbstractItemModel本身不存储任何数据滴~

他提供了一些借口来供试图访问数据。

以为本例子中模型是非层级结构的,所以不需要考虑父子继承关系。

如果是层次结构的,还要实现index()和parent()函数。

完成头文件:



因为这个模型是非层次结构的,可以忽略掉模型索引对应的父项目

所以只需要简单的返回字符串列表中的字符串个数即可。



对于视图中的项目,我们想要显示字符串列表中的字符串,这个函数就是用来返回对应索引参数的数据项。


像QTreeView和QTableView等一些视图,在显示项目数据的同时还会显示表头。

这里没有,我们必须自己定义被隐藏的表头

所以要使用headerData()函数提供数据的相关信息。


最后就是在main.cpp插入数据FishC、fishc、Fishc







页: [1]
查看完整版本: 161 -创建只读模型(QAbstractListModel)