Порядок итераций QDirIterator

Мое приложение использует 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. Любая помощь, совет или ответ приветствуется 🙂

2

Решение

Описание класса QDirIterator

В отличие от QDir::entryList(), QDirIterator не поддерживает сортировку.

Вы не можете изменить порядок элементов в QDirIterator. Но QDir::entryList() вам тоже не поможет, так как поддерживает только определенный набор сортировщиков.

Гораздо лучше переименовать ваши файлы. Подумайте об этом:

image0
Изображение1
Image2
Image3
...
Image9
Image10

Обычный алгоритм сортировки строк выполняет лексическое сравнение между двумя строками, которое работает следующим образом:

  1. Возьми следующий символ
  2. Если следующего символа нет, переходите к 5
  3. Если символы отличаются, то
    • Если первый символ меньше второго, верните FIRST_LESS
    • еще вернуть FIRST_MORE
  4. Если они не отличаются Перейти к 1
  5. Если в первой строке все еще есть символы, верните FIRST_MORE
  6. Если во второй строке все еще есть символы, верните FIRST_LESS
  7. Вернуться ЖЕ

И вот почему вы получите все файлы, начинающиеся с нуля, а затем все файлы, начинающиеся с 1 и так далее:

image0
Изображение1
Image10; потому что 1 < 2
Image11; потому что 1 < 2
Image12; потому что 1 < 2
...
Image2
Image20; потому что 2 < 3
Image21; потому что 2 < 3
Image22; потому что 2 < 3
...

Самый простой способ исправить это — изменить имена файлов. В противном случае вы должны написать свой собственный анализатор имен файлов, который принимает имя файла, разбивает его на имя + номер и сортирует по номеру.

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector