QT实现对文件名进行排序
QStringList QDir::entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const
,该成员函数实现根据路径获取该文件夹下文件,其中QDir::SortFlags
是一个枚举类型,各个常量参照QT的官方文档:
QDir filedir(dir_path);
QStringList filenames = filedir.entryList(QDir::Files, QDir::Name); //按照QT所给的排序方式按名称排序
得到的排序结果:
demo1.jpg
demo10.jpg
demo11.jpg
...
demo2.jpg
demo3.jpg
这不是所需要的结果,需要demo1.jpg、demo2.jpg ... demo10.jpg、demo11.jpg这样的结果
解决方案使用std::sort()
函数原型template <class RandomAccessIterator, class Compare> void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
其中first、last是两个迭代器,comp是比较器,作为排序依据
QDir filedir(dir_path);
QStringList filenames = filedir.entryList(QDir::Files, QDir::NoSort); //获取dir目录下的所有文件名
QCollator collator; //The QCollator class compares strings
//according to a localized collation algorithm.
collator.setNumericMode(true); //启用数字模式方式排序
std::sort(filenames.begin(), filenames.end(), collator); //第三个参数作为排序依据
参考资料:https://stackoverflow.com/questions/11933883/sort-filenames-naturally-with-qt