将 setFile 错误设置为带有 QString 的 QFileInfoList

Error at setFile to a QFileInfoList with a QString

假设我有:

QList<QString> filenameList;

filenameList 有一些文件的路径。

然后我创建一个QFileInfoList

QFileInfoList fileInfoList;

如何对 fileInfoList 中的每个对象使用 .setFile 方法? 我试过了:

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 或者至少 range-for 是你的朋友。

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

// 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;
}