2011-03-26 79 views
0

我有一個Qt應用程序,我從QAbstractTableModel中派生出我自己的模型類。我已經實施了必要的方法,如prescribed in the documentation。當我調用removeRows方法時,更改在我的視圖中是正確的(我想刪除的行被刪除)。從QAbstractTableModel派生類中刪除行不起作用,爲什麼?

但不知何故,模型上的操作似乎沒有傳播到我在模型中用於存儲數據的QList。當我將存儲在QList中的值保存到磁盤時,看起來沒有任何東西被removeRows從中清除。

這裏是我的removeRows實施樣子(這是基於從書高級Qt編程代碼,第3章,第125頁):

bool MyModel::removeRows(int row, int count, const QModelIndex&) 
{ 
    beginRemoveRows(QModelIndex(), row, row + count - 1); 

    for (int i = 0; i < count; ++i) { 
     mMyQList.removeAt(row); 
    } 

    endRemoveRows(); 

    return true; 
} 

我該如何解決這個問題?我錯過了什麼?

謝謝!

+0

你應該張貼一些代碼,ESP。你的removeRows()impl。 – 2011-03-26 23:25:44

+0

謝謝,我用我的removeRows()代碼更新了我的問題。 – 2011-03-27 01:25:32

回答

0

事實證明,我的removeRows實現沒有任何問題。

在顯示我的對話框之前,我的單元測試調用了保存方法。該對話框根本不調用保存方法。

難怪變化是可見的視圖,而不是輸出文件...

1

就像Frank O.所暗示的,很難在沒有看到代碼的情況下知道發生了什麼。但是從它的聲音來看,這些值並沒有從QList中刪除,因爲你沒有把它們帶出去。當你從Widget移動到Model/View類時,你必須自己做。也就是說,在你的removeRows()方法中,你必須從QList'手工'中刪除行。