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

您需要做两件事。首先是调整对 beginInsertRows 的调用。因为在这里我们告诉模型我们正在添加行、它们将去哪里以及我们要添加多少行。下面是方法说明:

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

因此,在您的情况下,由于您想在第一个索引处添加一行,并且只有一行,我们将 0 作为第一项的索引传递,0 是我们要添加的最后一项的索引(因为当然我们只添加一项)。

beginInsertRows(modelIndex(), 0, 0);

接下来,我们必须为项目提供数据。我假设“列表”是一个 QList(如果不是,它可能是相似的)。所以我们要调用“插入”方法。

list.insert(0, item);

应该就是这样。

于 2012-03-26T22:01:12.610 回答
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 回答
0

为了显示,您可以按照链接中的说明尝试代表(尽管我没有尝试过该示例)。如果您可以添加您的观察结果,它将对社区有所帮助。

于 2012-03-24T08:59:36.407 回答