Qt 之文件排序

Qt 之文件排序,第1张

文章目录
  • 场景及解决方案
  • 排序规则
  • 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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/562415.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-01
下一篇 2022-04-01

发表评论

登录后才能评论

评论列表(0条)

保存