QFile entryList自然排序问题

2019-05-10  本文已影响0人  田陌允

问题:

现有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
上一篇 下一篇

猜你喜欢

热点阅读