QAbstactTableModel插入顶部

时间:2012-03-24 07:30:10

标签: qt qabstracttablemodel

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

这个功能工作正常但不是在最后添加记录我想在顶部插入它。有关如何更新现有函数的任何指示?

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

3 个答案:

答案 0 :(得分:3)

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

  

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

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

beginInsertRows(modelIndex(), 0, 0);

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

list.insert(0, item);

那应该是它。

答案 1 :(得分:0)

对于显示,你可以尝试delegates,如链接中所述(尽管我没有尝试过这个例子)。如果您可以添加观察结果,它将有助于社区。

答案 2 :(得分: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();
}