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

作者:qianxiaohan

出处:https://www.cnblogs.com/qianxiaohan/p/18224499

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   记录学习的Lyx  阅读(393)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示