Loading

QT实现对文件名进行排序

QStringList QDir::entryList(QDir::Filters filters = NoFilter, QDir::SortFlags sort = NoSort) const,该成员函数实现根据路径获取该文件夹下文件,其中QDir::SortFlags是一个枚举类型,各个常量参照QT的官方文档:
image

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

posted @ 2024-05-31 14:19  记录学习的Lyx  阅读(136)  评论(0编辑  收藏  举报