鱼C论坛

 找回密码
 立即注册
查看: 4845|回复: 0

[技术原创] 161 -创建只读模型(QAbstractListModel)

[复制链接]
发表于 2016-12-6 11:18:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

2016-12-06_111743.jpg


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

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

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

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

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

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

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

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

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

创建空的Qt项目,添加C++类
微信截图_20161217100500.png


修改头文件:
微信截图_20161217103212.png


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

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

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

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

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

完成头文件:
微信截图_20161217103844.png



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

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

微信截图_20161217104254.png


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


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

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

所以要使用headerData()函数提供数据的相关信息。
微信截图_20161217104931.png


最后就是在main.cpp插入数据FishC、fishc、Fishc
微信截图_20161217105112.png


0.gif


myModel.zip (4.29 KB, 下载次数: 1, 售价: 2 鱼币)


本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 18:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表