2012-03-24 8 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

+0

両方 - 既存のコードが両方を処理するため – Hiren

答えて

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

あなたには2つのことが必要です。まず、beginInsertRowsへの呼び出しを調整します。ここでは、行を追加していること、行こうとする場所、追加する行の数をモデルに伝えているからです。あなたが最初の行を追加したいので、

無効QAbstractItemModel ::あなたのケースでそう(最初のconst QModelIndex &親、 int型、int型最後)beginInsertRows

:ここでは方法の説明があります最初の項目のインデックスとして0を渡し、追加している最後の項目のインデックスである0を渡します(もちろん1つの項目を追加するだけなので)。

beginInsertRows(modelIndex(), 0, 0); 

次に、アイテムのデータを提供する必要があります。私は 'リスト'がQListであると仮定しています(そうでない場合はおそらく似ています)。だから、私たちは 'insert'メソッドを呼びたいと思っています。

list.insert(0, item); 

これはそれです。

関連する問題