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