Her*_*rst 24 c++ qt natural-sort
我正在阅读目录内容使用QDir::entryList().其中的文件名结构如下:
index_randomNumber.png
Run Code Online (Sandbox Code Playgroud)
我需要按照indexWindows资源管理器对文件进行排序的方式排序,以便我得到
0_0815.png
1_4711.png
2_2063.png
...
Run Code Online (Sandbox Code Playgroud)
而不是排序通过QDir::Name给我:
0_0815.png
10000_6661.png
10001_7401.png
...
Run Code Online (Sandbox Code Playgroud)
在Qt中是否有内置的方法来实现这一点,如果没有,那么实现它的正确位置是什么?
Rom*_*rio 15
如果要使用QCollator从返回的条目列表中对条目QDir::entryList进行排序,可以使用以下结果对结果进行排序std::sort():
dir.setFilter(QDir::Files | QDir::NoSymLinks);
dir.setSorting(QDir::NoSort); // will sort manually with std::sort
auto entryList = dir.entryList();
QCollator collator;
collator.setNumericMode(true);
std::sort(
entryList.begin(),
entryList.end(),
[&collator](const QString &file1, const QString &file2)
{
return collator.compare(file1, file2) < 0;
});
Run Code Online (Sandbox Code Playgroud)
根据The Badger的评论,QCollator也可以直接用作参数std::sort,替换lambda,所以最后一行变为:
std::sort(entryList.begin(), entryList.end(), collator);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10374 次 |
| 最近记录: |