如何在基于QMap的QAbstractListModel中查找特定行的索引?
问题描述:
我有一个派生自QAbstractListModel
的类,基于QMap<QUuid, CustomObject>
,我用qml中的ListView
进行了可视化。在我的应用程序运行时间有一段时间,我正在根据它的QUuid
从这张地图中删除一些项目。当我正在执行删除操作时,我想致电beginRemoveRows
,以便通知ListView
它的内容正在更改并需要重新绘制。如何找到beginRemoveRows
的正确索引?如何在基于QMap的QAbstractListModel中查找特定行的索引?
答
实际上使用QMap
是非常好的。你只需要找到正确的索引beginIndexRow
,beginRemoveRows
等。例如查找指数beginIndexRow
看起来是这样的:
int index = std::distance(myQMap.begin(), myQMap.lowerBound(id));
beginInsertRows(QModelIndex(), index, index);
myQMap[id] = myCustomObject;
endInsertRows();
而是自己保持的QList的,你可以通过QMAP获得密钥列表:: keys() – user2155932
这是个好主意,试试吧!谢谢! – Silex
我刚刚阅读文档,也测试了'QMap :: keys()',不幸的是它不会工作,因为它返回了一个ID的排序列表,因此如果我删除并添加一个新项目在' QMap'新项目的索引可能不是最后一个索引,这可能会改变我的'QMap'中的其他几个项目的索引。我必须获得与'beginInsertRow'一起添加的完全相同的索引,因为这是'ListView'意识到的。 – Silex