问题:
现有slide1~slide32共32个jpg文件
entryList默认获取到的列表排序为:
slide1,slide10,slide11,slide12......
slide2,slide21,slide22,slide23.....
...
...
解决思路:
1.循环遍历QFile::entryList获取到的文件列表
2.截取文件名字符串中的数字字段以int返回
3.利用qSort(...)函数进行排序
C++代码:
inline int findNumberPart(const QString& sIn)
{
QString s = "";
int i = 0;
bool isNum = false;
while (i < sIn.length())
{
if (isNum)
{
if (!sIn[i].isNumber())
break;
s += sIn[i];
}
else
{
if (sIn[i].isNumber())
s += sIn[i];
}
++i;
}
if (s == "")
return 0;
return s.toInt();
}
bool naturalSortCallback(const QString& s1, const QString& s2)
{
int idx1 = findNumberPart(s1);
int idx2 = findNumberPart(s2);
return (idx1 < idx2);
}
使用示例demo:
QString fileList = myFolder.entryList(QStringList() << "*.JPG");
qSort(fileList.begin(), fileList.end(), naturalSortCallback);
image
网友评论