我的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();
}
这个功能工作正常但不是在最后添加记录我想在顶部插入它。有关如何更新现有函数的任何指示?
我已经尝试了一些组合,但没有运气。
答案 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,如链接中所述(尽管我没有尝试过这个例子)。如果您可以添加观察结果,它将有助于社区。 p>
答案 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();
}