100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Qt 之文件排序(避免出现1. txt 10.txt 11.txt 2.txt.20.txt....)

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

时间:2020-05-24 00:48:32

相关推荐

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 pare(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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。