QDiriterator迭代顺序
QDirIterator iteration order
我的应用程序正在使用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的新手。任何帮助,提示或答案都将受到赞赏:)
qdiriterator类参考
与
QDir::entryList()
不同,QDirIterator
不支持排序。
您无法更改QDiriterator中元素的顺序。但是QDir::entryList()
也不会帮助您,因为它仅支持一组特定的排序探针。
重命名您的文件要好得多。以这种方式考虑:
图像0Image1Image2Image3 ...图像9Image10
通常的字符串排序算法在两个字符串之间进行词汇比较,该算法像
一样工作- 采取下一个符号
- 如果没有下一个符号,请转到5
- 如果符号不同,则
- 如果第一个符号比第二个返回少于第一个符号
- 其他返回first_more
- 如果他们没有区别,则goto 1
- 如果第一个字符串仍然具有符号返回first_more
- 如果第二个字符串仍然具有符号返回first_less
- 返回相同
这就是为什么您将首先从零开始获得所有文件,然后所有文件以1开始,等等:
:图像0Image1Image10;因为1&lt;2Image11;因为1&lt;2Image12;因为1&lt;2 ...Image2Image20;因为2&lt;3Image21;因为2&lt;3Image22;因为2&lt;3 ...
解决此问题的最简单方法是更改文件名。否则,您必须编写自己的文件名解析器(以文件名为单位)将其分为名称 数字并根据数字分类。
我知道这是一个旧问题
示例使用是:
QDir dir(pathToDirectory);
dir.setSorting(QDir::SortFlag::DirsFirst | QDir::SortFlag::Name);
首先对目录进行分类,然后按名称按所有DIRS/FILES;
希望它有帮助。
相关文章:
- 顺序容器和迭代器算术
- 在C++中,是否可以在单个循环中顺序迭代多个迭代器
- 基于 C++ 范围的 std::vector 迭代的顺序
- 有没有办法在不使用任何迭代的情况下将字符的字母顺序排列
- 使用 boost::filesystem 迭代目录时可以更改文件的顺序吗?
- 确定设置迭代器的顺序
- 如何按顺序迭代几个容器
- QDiriterator迭代顺序
- 二进制搜索树中按顺序遍历的复杂性(使用迭代器)
- 迭代器是否以相同的顺序迭代 boost::unordered_set 或 boost::unordered_map 只要集合不变?
- unordered_map同一键的迭代顺序
- 是STL RBTree顺序迭代O(N ln N)
- std::unordered_set元素的迭代顺序保证始终相同
- 如何编写一个迭代器包装器来组合底层迭代器中的顺序值组
- 按排序顺序迭代 std::vector
- 是否可以按值顺序迭代映射
- 以相反的顺序迭代可变模板参数
- 使用自定义顺序迭代boost multi_index
- 如何按照我自己的顺序/它们被插入的顺序迭代std::map值
- 排序的数据结构,用于按顺序迭代、有序推送和删除(仅从顶部开始 N 个元素)