未分类的Qt容器

Say*_*era 2 qstring qt qdir qvector qfileinfo

我有一个QVector,它应该存储文件路径,比如

"./zThumbnail/1004.jpeg"
"./zThumbnail/1005.jpeg"
"./zThumbnail/1006.jpeg"
"./zThumbnail/1007.jpeg"
"./zThumbnail/1008.jpeg"
"./zThumbnail/1009.jpeg"
"./zThumbnail/101.jpeg"
"./zThumbnail/1010.jpeg"
"./zThumbnail/1011.jpeg"
"./zThumbnail/1012.jpeg"
"./zThumbnail/1013.jpeg"

QFileInfoList filelistinfo = dir.entryInfoList();
foreach (const QFileInfo &fileinfo, filelistinfo) {
imagePath.push_back(fileinfo.absoluteFilePath());
qDebug() << fileinfo.absoluteFilePath();
}


./abc/1.jpg
./abc/2.jpg
./abc/3.jpg
.
.
.
./abc/1209.jpg
Run Code Online (Sandbox Code Playgroud)

但不是按照上面的顺序存储它,而是存储像

./abc/1.jpg
./abc/10.jpg
./abc/100.jpg
./abc/1000.jpg
./abc/1001.jpg
.
.
Run Code Online (Sandbox Code Playgroud)

如何以数字顺序存储图像文件路径?

eyl*_*esc 5

您可以使用排序std::sort,因为我假设文件的基本名称是整数.

QFileInfoList filelistinfo = dir.entryInfoList();
for(const QFileInfo &fileinfo: filelistinfo) 
    imagePath.push_back(fileinfo.absoluteFilePath());

std::sort(imagePath.begin(), imagePath.end(),
          [](const QString & a, const QString & b) -> bool
{
    return QFileInfo(a).baseName().toInt() < QFileInfo(b).baseName().toInt();
});

qDebug()<<imagePath;
Run Code Online (Sandbox Code Playgroud)

注意:qSort目前不建议使用,因为它通常比较慢std::sort,有关更多信息,请参阅:qsort vs std :: sort的性能?

  • `std :: qsort!= qSort`.话虽如此,`QSort`也被Qt自己弃用,所以不,不要推荐[`qSort`](http://doc.qt.io/qt-5/qtalgorithms-obsolete.html). (3认同)
  • @Jiu读到这个:/sf/ask/329567381/,std :: sort比qSort快 (2认同)