我對重置或清除與QAbstractItemModel關聯的數據的正確方法有點困惑。我正在編寫一個應用程序,用戶可以用一組新數據(空或小)重新開始。在qt中清除/重置模型(刪除所有行)
我應該在用戶提出這個請求時刪除舊模型嗎?或者我應該單獨離開模型並刪除所有行?
問候, 丹奧
我對重置或清除與QAbstractItemModel關聯的數據的正確方法有點困惑。我正在編寫一個應用程序,用戶可以用一組新數據(空或小)重新開始。在qt中清除/重置模型(刪除所有行)
我應該在用戶提出這個請求時刪除舊模型嗎?或者我應該單獨離開模型並刪除所有行?
問候, 丹奧
一般來說,我寧願讓模型對變化作出反應,並採取必要的行動來更新它的視圖(間接地)。但是,編程模型可以是PITA,因此如果我正在審查創建新模型的代碼並刪除舊模型,我可能會查看手指。只有在確定用戶只刪除所有行時才能執行此操作。如果用戶可能會逐漸刪除模型中的項目,那麼您可能最好是首先實施正確的刪除操作...
此外,ModelTest可能會幫助您發現Qt模型的問題。
如果用戶是真正開始了一個新的數據集,那麼對我來說很有意義簡單地刪除舊的模式,並創建一個新的。簡單,有效,它匹配用戶正在做的事情。
我不知道哪條路是真正的「好」,但刪除所有行可以是一個相當簡單的功能是這樣的:
void MyModel::Clear(void)
{
// remove all data from internal data structures
...
// Call QAbstractItemModel::reset to ensure any views know that everything has changed.
reset();
}
這是不夠的。 QT提供了應該使用的beginResetModel和endResetModel – IceFire 2015-11-21 17:33:23