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

场景及解决方案

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

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

排序规则

代码如下:

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
  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值