0

TableModelクラスにaddFile関数があり、最後に新しいレコードを挿入します。

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();
}

この関数は正常に機能しますが、最後にレコードを追加する代わりに、上部に挿入したいと思います。既存の関数を更新する方法についてのポインタはありますか?

私はすでにいくつかの組み合わせを試しましたが、運はありません。

4

3 に答える 3

3

あなたがしなければならないことが2つあります。1つは、beginInsertRowsの呼び出しを調整することです。ここで、行を追加すること、行を追加する場所、および追加する行の数をモデルに通知しているためです。メソッドの説明は次のとおりです。

void QAbstractItemModel :: beginInsertRows(const QModelIndex&parent、int first、int last)

したがって、最初のインデックスに1行だけを追加する場合は、最初のアイテムのインデックスとして0を渡し、最後に追加するアイテムのインデックスである0を渡します(もちろん、 1つのアイテムのみを追加しています)。

beginInsertRows(modelIndex(), 0, 0);

次に、アイテムのデータを提供する必要があります。'list'はQListだと思います(そうでない場合はおそらく似ています)。したがって、「挿入」メソッドを呼び出します。

list.insert(0, item);

そしてそれはそれであるはずです。

于 2012-03-26T22:01:12.610 に答える
0

表示については、リンクで説明されているようにデリゲートを試すことができます(ただし、例は試していません)。あなたがあなたの観察を加えることができれば、それはコミュニティを助けるでしょう。

于 2012-03-24T08:59:36.407 に答える
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();
}
于 2012-03-27T10:36:59.577 に答える