Qt QAbstractTableModel在顶部插入
我的TableModel类中有addFile函数,它在末尾插入一条新记录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();
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();
}
您想只显示在开头插入的项目,还是希望列表也按这种方式排序?两者-因为现有代码同时处理这两个问题您想只显示在开头插入的项目,还是希望列表也按这种方式排序?两者-因为现有代码同时处理这两个问题