2016-03-10 16 views
0

我有一個派生自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

回答

0

實際上使用QMap是非常好的。你只需要找到正確的索引beginIndexRowbeginRemoveRows等。例如查找指數beginIndexRow看起來是這樣的:

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