将 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;
}
假设我有:
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;
}