文章目录

  • 场景及解决方案
  • 排序规则
  • QCollator类

场景及解决方案

项目中,经常用到一些对目录文件进行排序显示的需求,然后遇到一些有规则命名的文件时,经常会出现一些意想不到的排序结果,比如:

这时,我们就需要做一些改进工作了,其实就是对目录下的文件定制一个排序规则,

排序规则

代码如下:

QDir dir("./files");
if(!dir.exists())
{
qDebug() << “path not exist!”;
return 0;
}
dir.setFilter(QDir::Files | QDir::NoSymLinks);
QStringList files = dir.entryList(dir.filter() | QDir::NoDotAndDotDot);
QCollator collator;
collator.setNumericMode(true);

std::sort(files.begin(), files.end(),
[& collator](const QString & str1, const QString & str2)
{
return collator.compare(str1, str2) < 0;
});

for(const auto &v: files)
{
qDebug() << v;
}

结果:

QCollator类

QCollator使用QLocale和可选的排序策略进行初始化。它尝试用指定的值初始化collator。然后,可以使用collator以依赖于语言环境的方式对字符串进行比较和排序。

QCollator对象可以与基于模板的排序算法(如std::sort)一起使用,对qstring列表进行排序。

除了区域设置和排序策略外,还可以设置几个影响排序结果的可选标志。

//大小写
void setCaseSensitivity(Qt::CaseSensitivity sensitivity)
//标点符号
void setIgnorePunctuation(bool on)
//QLocale在其构造函数中使用语言/国家对进行初始化,并提供与QString中类似的数字到字符串和字符串到数字转换函数。
void setLocale(const QLocale &locale)
//当on设置为true时启用数字排序模式。
//这将允许对数字进行正确排序,例如,99之后进行100次排序。
//默认情况下,此模式处于关闭状态。
void setNumericMode(bool on)
//排序键
QCollatorSortKey sortKey(const QString &string) const

Qt 之文件排序(避免出现1. txt 10.txt 11.txt 2.txt.20.txt....)相关推荐

  1. 【转】Qt之文件操作 QFile

    转载:http://blog.csdn.net/liuhongwei123888/article/details/6084761 今天学习QT的文件操作 1.QIODevice 直接继承自QObjec ...

  2. C++Qt开发——文件操作

    简介 QT中的IO操作通过统一的接口简化了文件与外部设备的操作方式,QT中文件被当作一种特殊的外部设备,文件操作与外部设备操作相同.IO操作的本质是连续存储空间的数据读写. 1. IO设备的类型 顺序 ...

  3. 【解决方案】QT读写文件

    下面的这些东西,在网上可能都会找到类似的文章,但是真正使用的时候,却没有办法打开对应的文件. 解决方案: 打开项目所在文件夹. 比如我这里的项目叫Test 可以看到前面两个有build-* 文件夹. ...

  4. opengl png图片 qt_Qt资源文件的格式,并用CMake添加Qt资源文件

    目录 ......QRC文件的写法用CMake添加Qt资源文件添加QRC文件的函数步骤CPP中使用QRC文件使用QRC文件实例程序结果QRC文件CMakeLists.txt文件Dialog.h文件Di ...

  5. php对文件排序,php – 使用filemtime()和usort()对文件进行排序会产生随机结果

    我正在使用usort()和filemtime()按修改日期对文件进行排序,但它会以错误的顺序随机返回文件.我想我错过了一些非常简单但我无法弄明白的东西. usort($user_files, func ...

  6. 《spark技术应用》课程期末考试大作业报告,使用eclipse完成求top值、文件排序、二次排序三个程序的个性化开发。

    ​​​​目录 一.选题的目的及要求... 4 二.设计思路... 4 三.主要内容及关键技术.. 5 四.制作步骤... 5 1.准备工作... 5 1.1在VMware中安装一台Ubuntu64位系 ...

  7. Qt QFile文件操作详解

    Qt QFile文件操作详解 很多应用程序都需要具备操作文件的能力,包括对文件内容进行读/写.创建和删除文件等,甚至某些应用程序的诞生纯粹是为了操作文件,比如 WPS Office.PDFedit 等 ...

  8. python文件信息排序_python文件排序的方法总结

    在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符:用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名'屏蔽'). (1 ...

  9. 编写程序创建一个通讯录文件,在其中存入10位同学的姓名、年龄、电话号码,并在屏幕上输出第2、4、6、8、10位同学的信息

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p257 习题8 8.编写程序创建一个通讯录文件,在其中存入10位同学的姓名.年龄.电话号码,并在屏幕上 ...

最新文章

  1. 必读:ICLR 2020 的50篇推荐阅读论文
  2. 大专生如何报考MBA
  3. 最新maven插件的安装
  4. SD-WAN开源优势是什么?
  5. [SDOI2011] 计算器
  6. 实现CA证书创建及客户端申请证书
  7. C++ boost 正则表达式用法
  8. 【div+css】两个div,如何让内层的div在外层div中水平垂直居中
  9. Matlab编程基础
  10. 相机与镜头的基本概念
  11. android浏览器测试,Android多款手机浏览器页面加载测试横评
  12. sftp服务器下载文件至本地电脑
  13. git撤销commit
  14. AIOT-物模型(产品模型、数据模板)
  15. Android Jetpack之DataBinding+ViewModel+LiveData+Room
  16. 英雄联盟怎么解除小窗口_英雄联盟:老玩家都不知道的小技巧,一定要注意这些细节|英雄联盟|召唤师|防御塔|新英雄|亚索...
  17. 找回生命本源的力量,走上生命觉醒的旅程
  18. 技术的发展与互联网的发展
  19. Python GUI编程之视频解析软件制作
  20. 小写数字与大写数字转换

热门文章

  1. 2021年高考湛江成绩查询,湛江学子注意!今日起可查询,2021年1月学考成绩公布...
  2. 小白学算法——借用leetcode(其实就是刷题记录....——1
  3. FCC Part 25.203 卫星地球站站址和频率的选择—申请材料(1)
  4. VUE === vuex是什么?怎么使用?哪种功能场景使用它?
  5. 什么蓝牙耳机续航强?续航好的蓝牙耳机推荐
  6. .mvn目录mvnw和mvnw.cmd文件说明
  7. tidytext | 耳目一新的R-style文本分析库
  8. WebAssembly 能取代 Kubernetes 成为下一代云计算王者吗?
  9. Android 倒影
  10. 荣耀8官方ROM降级(升级)教程--使用Firmware Finder7.9捐赠版来完成(适用于其它华为手机)