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]