使用QAbstractListModel,如果模型大小可调,是否需要实现insertRows和removeRows?

问题描述 投票:0回答:1

我正在实现一个

QAbstractListModel
派生类(尽管这个问题也适用于
QAbstractItemModel
),它将成为
QListView
的模型。列表视图旨在成为具有可显示的最大项目数的日志。所以它具有以下性质:

  • 该项目不可编辑
  • 它们不能被拖、放或以其他方式重新排序
  • 行的添加和删除过程不是由用户操作驱动的(即有一个新项目要记录)

基本上,我的模型将具有类似于

appendItem(const MyDataType &val)
函数的功能,并且根据列表中的项目数量,附加项目可能会从列表顶部删除项目。

这种情况下,是否需要从

insertRows()
重新实现
removeRows()
QAbstractListModel
?无论如何,这些函数似乎不适合我正在做的事情,因为
insertRows()
确实 not 指定要添加的数据,但我需要更改模型的底层数据结构来添加项目。只有当我有实际数据要添加时,这才有意义。

我可以只编写一个像

appendItem(const MyDataType &val)
这样的函数,在内部调用
beginInsertRows
endInsertRows
,并在必要时调用
beginRemoveRows
endRemoveRows
,而不用担心
insertRows
removeRows
吗?还是使用
QAbstractItemModel
不正确会导致错误?

c++ qt qabstractitemmodel qabstractlistmodel
1个回答
0
投票

appendItem(...)
方法是有效的。
它与
void QStandardItemModel::appendRow(const QList<QStandardItem *> &items)
非常相似,无非是 Qt 开发人员自己创建的便利功能,让生活更轻松。如果这是他们做的事,为什么你不呢?

请注意,一旦您使模型可从视图写入,您就需要从

QAbstractItemView
重写所有这些讨厌的方法,但即使在这种情况下,您也可以保留
appendItem(...)
作为一种方便的方法。

© www.soinside.com 2019 - 2024. All rights reserved.