Qt中 抽象列表模型类 的使用

QAbstractListModelClass

详细描述:

QAbstractListModel可以被继承以创造一个一维列表模型。

QAbstractListModel为那些把它们的数据显示成一个单一的、无等级关系的数据序列的模型提供了一个标准的接口,它不能被直接使用,必须被继承后使用。

由于 QAbstractListModel提供了一个比QAbstractItemModel更特殊化的接口,用它来显示树状视图是不合适的。如果你想显示树状视图,你需要子类化QAbstractTreeModel。如果你需要大量的列表模型来管理数据,你应该选择子类化QAbstractTableModel来达到这一目的,而不是用 QAbstractListModel。

简单的模型可以通过 1. 子类化 QAbstractListModel + 2. 实现最少数量的必需的函数来创建。比如,我们可以实现一个简单的、只读的、基于QStringList的、为列表视图控件提供一些字符串的模型。在这个例子中,我们只需要实现rowCount()方法和data()方法,rowCount()方法用来返回项的数目,data()方法用来取得每个项中的内容。

由于这个模型只表示一维结构,所以rowCount()方法返回这个模型中所有的项的总数目。为了增强复用性,columnCount()方法可以被实现以便在各种视图中更好地显示。但是默认情况下,这个模型的视图中只有一列。

子类化

当继承QAbstractListModel时,你必须提供rowCount()和data()的实现。如果你想让你的子类运行的更好,你还需要提供headerData()的实现。

如果你的模型正在使用QML而且你需要roleNames()方法提供的以外的角色,你必须重载它。

对于可编辑的列表模型,你还需要实现setData()方法和flags()方法,后者返回一个包含Qt::ItemsEditable的值。

注意,QAbstractListModel提供了columnCount()方法的默认实现,它会通知视图在这个模型中只有一列数据。

为大小可变的数据结构(类似列表)提供接口的模型应当实现insertRows()和removeRows()。当实现这些方法时,千万要记得调用合适的方法来使得与该模型相连的视图能意识到以下这些变化:

1. 在把新的行插入到数据结构中之前,insertRows()方法必须调用beginInsertRows(),并且在插入完成后必须立即调用endInsertRows()。

2. 在把一些行从数据结构中删除之前,removeRows()方法必须调用beginRemoveRows(),并且在删除完成呢个后必须立即调用endRemoveRows()。

注意:关于一些一般化的子类化模型的方法,参见Model Subclassing Reference。

另请参阅:Model Classes,Model Subclassing Reference,QAbstractItemView,QAbstractTableModel和Item Views Puzzle Example。

时间: 2024-12-17 03:36:33

Qt中 抽象列表模型类 的使用的相关文章

Qt中多对多关系类调用

之前一直做C的开发,什么东西都是自己想出来自己实现,很少去找已经实现的类库,最近做一个管理Led灯的程序.用C的思路实现功能简单,但是健壮就遇到了不少问题,想通过数据结构来解决,发现Qt中正好有这种想要的数据结构. 之前是QLinkedList, 后来发现list需要实现operator==类的运算符重载我也不记得了. 采用QMultiMap正好符合我的使用场景,还不用费工夫实现运算符重载,真是省心啊,哈哈. 越来越喜欢面向对象了.

第五十八课、自定义模型类(上)------------------狄泰软件学院

 一.自定义模型类 1.QStandardItemModel是一个通用的模型类 (1).能够以任意的方式组织数据(线程.非线性) (2).数据组织的基本单位为数据项(QStandardItem) (3).每一个数据项能够存储多个具体数据(附加数据角色) (4).每一个数据项能够对数据状态进行控制(可编辑.可选...) 2.Qt中的通用模型类QStandardItemModel (1).QStandardItemModel继承自抽象的模型类QAbstractItemModel (2).QStand

第58课 自定义模型类(上)

1. QStandardItemModel是一个通用的模型类 (1)能够以任意的方式组织数据(线性.非线性) (2)数据组织的基本单位为数据项(QStandardItem) (3)每一个数据项能够存储多个具体数据(可通过附加数据角色加以区别) (4)每一个数据项能够对数据状态进行控制(可编辑.可选.--) 2. Qt中的通用模型类:QStandartItemModel (1)QStandardItemModel继承自QAbstractItemModel. (2)QStandardItemMode

django的模型类管理器-----------数据库操作的封装

模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除,ORM框架会转换成对应的delete语句. 模型类的属性 属性objects:管理器,是Manager类型的对象,用于与数据库进行交互. 当没有为模型类定义管理器时,Django会为模型类生成一个名为objects的管理器,自定义管理器后,Django不再生成默认管理器objects. 管理器是D

QT中使用Glut库

用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符,就是说没有这个函数的声明.接下来就来安装glut库: 1.先下载glut库 http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip. 2.将下载下来的文件解压,将glut32.lib和glut.lib两个lib文件移到qt

第32课 Qt中的文件操作

1. Qt的中IO操作 (1)Qt中IO操作的处理方式 ①Qt通过统一的接口简化了文件和外部设备的操作方式 ②Qt中的文件被看作一种特殊的外部设备 ③Qt中的文件操作与外部设备的操作相同 (2)IO操作中的关键函数接口——IO操作的本质:连续存储空间的数据读写 ①打开设备:bool open(OpenMode mode); ②读取数据:QByteArray read(qint64 maxSize); ③写入数据:qint64 write(const QByteArray& byteArray);

Windows平台下Qt中glut库的使用

用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是说“glutSolidSphere”: 找不到标识符,就是说没有这个函数的声明.接下来就来安装glut库: 1.先下载glut库http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip. 2.将下载下来的文件解压,将glut32.lib和glut.lib两个lib文件移到qt目

【Python-Django定义用户模型类】Python-Django定义用户模型类详解!!!

定义用户模型类 1. Django默认用户认证系统 Django自带用户认证系统 它处理用户账号.组.权限以及基于cookie的用户会话. Django认证系统位置 django.contrib.auth包含认证框架的核心和默认的模型. django.contrib.contenttypes是Django内容类型系统,它允许权限与你创建的模型关联. Django认证系统同时处理认证和授权 认证:验证一个用户是否它声称的那个人,可用于账号登录. 授权:授权决定一个通过了认证的用户被允许做什么. D

Qt 中一些常用类中文说明

Qt 中一些常用类中文说明是本文讲述的内容,这篇文章主要是介绍Qt 当中经常使用的类,采取的是使用字母索引的方式,下面的类是被经常使用的. QDataStream 为QIODevice提供了一串的二进制的数据 QDataWidgetMapper 提供了从数据模型到部件的映射 QData 日期的功能 QDateEdit 提供了日期的部件用来编辑日期,是基于QDateTimeEdit 部件 QDateTime 提供日期与时间的功能 QDateTimeEdit 提供了编辑日期与实践的部件 QDBusA