QDiriterator迭代顺序

QDirIterator iteration order

本文关键字:顺序 迭代 QDiriterator      更新时间:2023-10-16

我的应用程序正在使用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 

通常的字符串排序算法在两个字符串之间进行词汇比较,该算法像

一样工作
  1. 采取下一个符号
  2. 如果没有下一个符号,请转到5
  3. 如果符号不同,则
    • 如果第一个符号比第二个返回少于第一个符号
    • 其他返回first_more
  4. 如果他们没有区别,则goto 1
  5. 如果第一个字符串仍然具有符号返回first_more
  6. 如果第二个字符串仍然具有符号返回first_less
  7. 返回相同

这就是为什么您将首先从零开始获得所有文件,然后所有文件以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;

希望它有帮助。