Ole*_*røm 2 c++ directory iteration qt
我的应用程序使用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();
}
Run Code Online (Sandbox Code Playgroud)
我是C++和Qt的新手.任何帮助,提示或答案表示赞赏:)
QDirIterator类参考
不同
QDir::entryList(),QDirIterator不支持排序.
您无法更改QDirIterator中元素的顺序.但是QDir::entryList()也不会帮助你,因为它只支持一组特定的排序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并根据编号进行排序.
我知道这是一个老问题,但 Qt 5.13 的更新答案可能是将QDir::SortFlag与您的QDir对象一起使用
使用示例是:
QDir dir(pathToDirectory);
dir.setSorting(QDir::SortFlag::DirsFirst | QDir::SortFlag::Name);
Run Code Online (Sandbox Code Playgroud)
这首先对目录进行排序,然后按名称对所有目录/文件进行排序;
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
3411 次 |
| 最近记录: |