Мое приложение использует 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()
вам тоже не поможет, так как поддерживает только определенный набор сортировщиков.
Гораздо лучше переименовать ваши файлы. Подумайте об этом:
image0 Изображение1 Image2 Image3 ... Image9 Image10
Обычный алгоритм сортировки строк выполняет лексическое сравнение между двумя строками, которое работает следующим образом:
И вот почему вы получите все файлы, начинающиеся с нуля, а затем все файлы, начинающиеся с 1 и так далее:
image0 Изображение1 Image10; потому что 1 < 2 Image11; потому что 1 < 2 Image12; потому что 1 < 2 ... Image2 Image20; потому что 2 < 3 Image21; потому что 2 < 3 Image22; потому что 2 < 3 ...
Самый простой способ исправить это — изменить имена файлов. В противном случае вы должны написать свой собственный анализатор имен файлов, который принимает имя файла, разбивает его на имя + номер и сортирует по номеру.
Других решений пока нет …