我正在实现一个
QAbstractListModel
派生类(尽管这个问题也适用于 QAbstractItemModel
),它将成为 QListView
的模型。列表视图旨在成为具有可显示的最大项目数的日志。所以它具有以下性质:
基本上,我的模型将具有类似于
appendItem(const MyDataType &val)
函数的功能,并且根据列表中的项目数量,附加项目可能会从列表顶部删除项目。
这种情况下,是否需要从
insertRows()
重新实现removeRows()
和QAbstractListModel
?无论如何,这些函数似乎不适合我正在做的事情,因为 insertRows()
确实 not 指定要添加的数据,但我需要更改模型的底层数据结构来添加项目。只有当我有实际数据要添加时,这才有意义。
我可以只编写一个像
appendItem(const MyDataType &val)
这样的函数,在内部调用 beginInsertRows
、endInsertRows
,并在必要时调用 beginRemoveRows
和 endRemoveRows
,而不用担心 insertRows
和 removeRows
吗?还是使用QAbstractItemModel
不正确会导致错误?
appendItem(...)
方法是有效的。void QStandardItemModel::appendRow(const QList<QStandardItem *> &items)
非常相似,无非是 Qt 开发人员自己创建的便利功能,让生活更轻松。如果这是他们做的事,为什么你不呢?
请注意,一旦您使模型可从视图写入,您就需要从
QAbstractItemView
重写所有这些讨厌的方法,但即使在这种情况下,您也可以保留 appendItem(...)
作为一种方便的方法。