2009-09-27 270 views
8

我對重置或清除與QAbstractItemModel關聯的數據的正確方法有點困惑。我正在編寫一個應用程序,用戶可以用一組新數據(空或小)重新開始。在qt中清除/重置模型(刪除所有行)

我應該在用戶提出這個請求時刪除舊模型嗎?或者我應該單獨離開模型並刪除所有行?

問候, 丹奧

回答

4

一般來說,我寧願讓模型對變化作出反應,並採取必要的行動來更新它的視圖(間接地)。但是,編程模型可以是PITA,因此如果我正在審查創建新模型的代碼並刪除舊模型,我可能會查看手指。只有在確定用戶只刪除所有行時才能執行此操作。如果用戶可能會逐漸刪除模型中的項目,那麼您可能最好是首先實施正確的刪除操作...

此外,ModelTest可能會幫助您發現Qt模型的問題。

4

如果用戶是真正開始了一個新的數據集,那麼對我來說很有意義簡單地刪除舊的模式,並創建一個新的。簡單,有效,它匹配用戶正在做的事情。

5

我不知道哪條路是真正的「好」,但刪除所有行可以是一個相當簡單的功能是這樣的:

void MyModel::Clear(void) 
{ 
    // remove all data from internal data structures 
    ... 

    // Call QAbstractItemModel::reset to ensure any views know that everything has changed. 
    reset(); 
} 
+3

這是不夠的。 QT提供了應該使用的beginResetModel和endResetModel – IceFire 2015-11-21 17:33:23