在setFile到带有QString的QFileInfoList时出错

Error at setFile to a QFileInfoList with a QString

本文关键字:QFileInfoList 出错 QString setFile      更新时间:2023-10-16

让我们假设我有:

QList<QString> filenameList;

filenameList包含一些文件的路径。

然后创建一个QFileInfoList

QFileInfoList fileInfoList;

我如何使用。setfile方法在fileInfoList的每个对象?我试着:

for(int i=0;i<filenameList.length();i++)
 {
    fileInfoList[i].setFile(filenameList[i]);
 }

但是我在尝试程序后(它成功编译)得到这个错误。

ASSERT failure in QList<T>::at: "index out of range"

有人能帮帮我吗?

fileInfoList在尝试访问列表的第一个元素时为空。你要做的是用

替换对setFile的调用
fileInfoList.append(QFileInfo(filenameList[i]));

由于您正在编写c++,而不是C,因此使用索引对列表元素进行直接迭代有点向后看,而且容易出错。std::copy或至少范围-为你的朋友。

您可以使用以下帮助函数:

// standard algorithms
QFileInfoList fileInfoListFromPaths(const QStringList & list) {
  QFileInfoList result;
  result.reserve(list.size());
  std::copy(list.begin(), list.end(), std::back_inserter(result));
  return result;
}
// explicit iteration
QFileInfoList fileInfoListFromPaths(const QStringList & list) {
  QFileInfoList result;
  result.reserve(list.size());
  #if 1
  // C++11
  for (path : list) result << QFileInfo(path);
  #else
  // or C++98
  foreach (path, list) result << QFileInfo(path);
  #endif
  return result;
}