栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录

场景及解决方案排序规则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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779658.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号