我的应用程序正在使用QDirIterator迭代文件夹中的.jpg图像。它们被命名为page0,page1,page2 ... page10,page 11 ......等等。
问题是它正在搜索page0,page1,page10,page11等文件中的文件。我怎么能改变这个?是否有正确订购文件的选项?
以下是我的代码的一小部分:
QDirIterator it(directory, QDirIterator::Subdirectories);
while (it.hasNext()) {
qDebug() << it.filePath();
if (it.filePath().contains(".jpg"))
{
string ImagePath = it.filePath().toStdString();
Mat img= cv::imread(ImagePath,3);
vectorMatchQuality.push_back(BestMatch(img, templ));
vectPath.push_back(ImagePath);
}
it.next();
}
我是C ++和Qt的新手。任何帮助,提示或答案都赞赏:)
答案 0 :(得分:6)
QDirIterator Class Reference
与
QDir::entryList()
不同,QDirIterator
不支持排序。
您无法更改QDirIterator中元素的顺序。但是QDir::entryList()
也不会帮助你,因为supports only a specific set of sort oders。
重命名文件要好得多。想一想:
Image0 Image1 Image2 Image3 ... Image9 Image10
通常的字符串排序算法会在两个字符串之间进行词法比较,就像
一样这就是为什么你会得到所有文件以零开始,然后所有文件以1开头,依此类推:
Image0 Image1 Image10 ; because 1 < 2 Image11 ; because 1 < 2 Image12 ; because 1 < 2 ... Image2 Image20 ; because 2 < 3 Image21 ; because 2 < 3 Image22 ; because 2 < 3 ...
解决此问题的最简单方法是更改文件名。否则你必须编写自己的文件名解析器,它取文件名,将其拆分为name + number并根据编号进行排序。
答案 1 :(得分:2)
我知道这是一个老问题,但是Qt 5.13的更新答案可能是将QDir::SortFlag与您的QDir对象一起使用
示例用法是:
QDir dir(pathToDirectory);
dir.setSorting(QDir::SortFlag::DirsFirst | QDir::SortFlag::Name);
这将首先对目录进行排序,然后按名称对所有目录/文件进行排序;
希望有帮助。