Qt QAbstractTableModel在顶部插入

Qt QAbstractTableModel在顶部插入,qt,qabstracttablemodel,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();

我的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();
}
void TableModel::addFile(常量QString&path)
{
beginInsertRows(QModelIndex(),list.size(),list.size());
表项目;
item.filename=路径;
QFile文件(路径);
item.size=file.size();
item.status=StatusNew;

列表对于显示,您可以按照链接中的说明进行尝试(虽然我没有尝试过该示例)。如果您可以添加您的观察结果,这将对社区有所帮助。

对于显示,您可以按照链接中的说明进行尝试(虽然我没有尝试过该示例)。如果您可以添加您的观察结果,这将有助于社区。

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

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

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

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

list.insert(0, item);

应该就是这样。

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

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

因此,在您的情况下,由于您希望在第一个索引处添加一行,并且只添加一行,因此我们将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();
}
void TableModel::addFile(常量QString&path)
{
beginInsertRows(QModelIndex(),list.size(),list.size());
表项目;
item.filename=路径;
QFile文件(路径);
item.size=file.size();
item.status=StatusNew;
列表0;i--)
{
列表[i]=列表[i-1];
}
列表[0]=item;//在顶部设置新添加的项
endInsertRows();
}

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

万一有人感兴趣

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();
}
void TableModel::addFile(常量QString&path)
{
beginInsertRows(QModelIndex(),list.size(),list.size());
表项目;
item.filename=路径;
QFile文件(路径);
item.size=file.size();
item.status=StatusNew;
列表0;i--)
{
列表[i]=列表[i-1];
}
列表[0]=item;//在顶部设置新添加的项
endInsertRows();
}

您想只显示在开头插入的项目,还是希望列表也按这种方式排序?两者-因为现有代码同时处理这两个问题您想只显示在开头插入的项目,还是希望列表也按这种方式排序?两者-因为现有代码同时处理这两个问题