2012-03-24 82 views
0

我在我的TableModel類中添加了addFile函數,它在最後插入一條新記錄。QAbstactTableModel頂部插入

void TableModel::addFile(const QString &path) 
{ 
    beginInsertRows(QModelIndex(), list.size(),list.size()); 
    TableItem item; 
    item.filename = path; 
    QFile file(path); 
    item.size = file.size(); 
    item.status = StatusNew; 
    list << item; 
    endInsertRows(); 
} 

該函數可以正常工作,但不是在最後追加記錄,而是想將其插入頂部。任何指針如何更新我現有的功能?

我已經嘗試了一些組合,但沒有運氣。

+0

你想只顯示開頭插入的內容或你想要列表進行排序這種方式呢? – Gangadhar 2012-03-24 07:41:18

+0

兩者 - 既然現有的代碼處理兩者 – Hiren 2012-03-24 07:52:00

回答

0

感謝大家的回覆。我發現我自己的解決方案:

在情況下,如果有人有興趣

void TableModel::addFile(const QString &path) 
{ 
    beginInsertRows(QModelIndex(), list.size(), list.size()); 
    TableItem item; 
    item.filename = path; 
    QFile file(path); 
    item.size = file.size(); 
    item.status = StatusNew; 
    list << item; // Why Assign first? Maybe not required 
    for (int i = list.size() - 1; i > 0; i--) 
    { 
     list[i] = list[i-1]; 
    } 
    list[0] = item; // set newly added item at the top 
    endInsertRows(); 
} 
0

對於顯示,您可以嘗試delegates,如鏈接中所述(我還沒有嘗試過這個例子)。如果您可以添加您的觀察結果,它將有助於社區。

3

有兩件事你需要做。首先是將調用調整爲beginInsertRows。因爲我們在這裏告訴模型,我們正在添加行,他們會去哪裏以及我們添加了多少。下面是該方法的描述:

無效化QAbstractItemModel :: beginInsertRows(常量QModelIndex &父, INT第一,INT去年)

所以你的情況,因爲你要在第一添加一行索引,並且只有一行,我們將0作爲第一個項目的索引,0作爲我們添加的最後一個項目的索引(因爲當然,我們只添加一個項目)。

beginInsertRows(modelIndex(), 0, 0); 

接下來我們必須提供該項目的數據。我假設'list'是一個QList(如果不是,它可能類似)。所以我們想調用'insert'方法。

list.insert(0, item); 

而且應該是這樣。