QAbsactTableModel插入顶部



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

这个函数工作得很好,但我不想在末尾附加记录,而是想在顶部插入它。关于如何更新我现有的函数,有什么建议吗?

我已经试过一些组合,但没有运气。

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

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

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

beginInsertRows(modelIndex(), 0, 0);

接下来,我们必须提供该项目的数据。我假设"list"是一个QList(如果不是,它可能是相似的)。所以我们想要调用"insert"方法。

list.insert(0, item);

应该就是这样。

对于显示,您可以按照链接中的说明尝试委托(不过我还没有尝试过这个示例)。如果你能添加你的观察结果,这将对社区有所帮助。

感谢大家的回复。我自己找到了解决方案:

如果有人对感兴趣

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

最新更新