问题 以编程方式将新行添加到QAbstractListModel子类


在已经实例化的QAbstractListModel子类中,如何在每列中添加包含数据的行,并让关联的QListView显示新行?

似乎唯一的方法是在我的模型中重新实现insertRow和setData,然后在另一个函数中以某种顺序将它们一起破解以添加一行。我必须这样做吗?肯定Qt必须使添加新行更容易。

非常感谢! --Dany。


8685
2018-01-16 00:19


起源

在再次查看这个问题时,我意识到当我编写它时我只是被烧坏了:P我的问题用简单的话来说:我如何在我的QAbstractItemModel子类中添加一个新行? - Dany Joumaa


答案:


只需在beginInsertRows()和endInsertRows()之间更改模型的数据存储即可。

例如,假设您有一个平面列表模型,您的模型将数据存储在QVector m_data内部。您想要添加列表,即在位置0插入一行:

beginInsertRows( QModelIndex(), 0, 0 ); //notify views and proxy models that a line will be inserted
m_data.prepend( somedata ); // do the modification to the model data
endInsertRows(); //finish insertion, notify views/models

15
2018-01-16 16:08



这工作得很好,最终看到列表视图中的一些项目是一个令人愉快的突破。但是,我花了一天半的时间试图解决所有问题,现在我的最新问题是尝试显示1x4数据集。目前它只显示一列有价值的数据,而不显示我的列标题。你有什么问题的指针吗?我接下来完全感到沮丧的是让Qt做一些像列表数据一样简单的事情.-- Dany。 - Dany Joumaa
@nessup:QListView仅支持一列。如果您需要多个列和标题,则需要使用QTreeView或QTableView。 - Frank Osterfeld


我担心你必须这样做。来自 文档

为可调整大小的类似列表的数据结构提供接口的模型可以提供实现 insertRows() 和 removeRows()


1
2018-01-16 07:54



那些链接已经死了 - Aidenhjj