如何在基于QMap的QAbstractListModel中查找特定行的索引?

问题描述:

我有一个派生自QAbstractListModel的类,基于QMap<QUuid, CustomObject>,我用qml中的ListView进行了可视化。在我的应用程序运行时间有一段时间,我正在根据它的QUuid从这张地图中删除一些项目。当我正在执行删除操作时,我想致电beginRemoveRows,以便通知ListView它的内容正在更改并需要重新绘制。如何找到beginRemoveRows的正确索引?如何在基于QMap的QAbstractListModel中查找特定行的索引?

+1

而是自己保持的QList的,你可以通过QMAP获得密钥列表:: keys() – user2155932

+0

这是个好主意,试试吧!谢谢! – Silex

+0

我刚刚阅读文档,也测试了'QMap :: keys()',不幸的是它不会工作,因为它返回了一个ID的排序列表,因此如果我删除并添加一个新项目在' QMap'新项目的索引可能不是最后一个索引,这可能会改变我的'QMap'中的其他几个项目的索引。我必须获得与'beginInsertRow'一起添加的完全相同的索引,因为这是'ListView'意识到的。 – Silex

实际上使用QMap是非常好的。你只需要找到正确的索引beginIndexRowbeginRemoveRows等。例如查找指数beginIndexRow看起来是这样的:

int index = std::distance(myQMap.begin(), myQMap.lowerBound(id)); 
beginInsertRows(QModelIndex(), index, index); 
myQMap[id] = myCustomObject; 
endInsertRows();