我尝试使用qtsringlist()对文件名进行排序,但是我不确定如何在QT中使用normalsorting。
“图像1.png”“图像10.png”“图像100.png”
用“image2.png”代替“image1.png”,以此类推。然后,我将列表添加到列表小部件中。下面我附上了我的代码。QStringList faList;(在头文件初始化)
帮帮忙。谢谢。
void QtWidgetsApplication::displayImagesList() {
QListWidgetItem *item = new QListWidgetItem();
QDirIterator it(QStringLiteral("C:\\Users\\Documents\\Visual Studio 2015\\Projects\\cas\\images"),
QStringList() << "*.png", QDir::Files, QDirIterator::Subdirectories);
QFileInfo files;
while (it.hasNext()) {
QFileInfo file(it.next());
faList.append(file.fileName());
ui.images->setSortingEnabled(true);
//ui.images->sortItems(Qt::AscendingOrder);
_files.push_back(file.fileName());
//cout << file.fileName().toStdString() << "\n";
//Cout << file.fileName().length() << "\n";
//if (file.fileName().length() == 17) {
// cout << file.fileName().toStdString() << "\n";
//
//}
}
ui.images->addItems(faList);
ui.images->setMinimumWidth(ui.images->sizeHintForColumn(0));
}
2条答案
按热度按时间brtdzjyr1#
如果你需要项目按“自然”顺序排序,你可以使用
QCollator
并利用它的numeric mode。示例代码(未测试)...
q7solyqu2#
你不能根据字符串的数字后缀对它们进行排序。
最简单的方法是重命名图像,使数字部分补零:
image001.png
,...image100.png
,则常规排序将起作用。或者,您可以提供自己的比较函数,将文件名解析为文本部分和数字部分,并根据需要进行比较。