QT -- QCollator对QStringList进行排序
1.QCollator
QCollator是一个可以适用于特定语言环境的字符串排序工具。QCollator对象还可以与std::sort模板函数一起使用来排序QString列表。
QCollator collator; //区分大小写 collator.setCaseSensitivity(Qt::CaseSensitivity::CaseSensitive); //不忽略标点符号 collator.setIgnorePunctuation(false); //排序适用的区域 collator.setLocale(QLocale(QLocale::Chinese)); //使用数字排序 collator.setNumericMode(true); collator(leftName, rightName);
例一:
std::vector<QString> result; result.emplace_back("A1"); result.emplace_back("KL10"); result.emplace_back("KL1"); result.emplace_back("KL2"); result.emplace_back("KA1"); result.emplace_back("BL1"); result.emplace_back("X1"); result.emplace_back("Q1"); result.emplace_back("a1"); std::sort(result.begin(), result.end(), [](const QString& left, const QString& right) { QCollator collator; collator.setCaseSensitivity(Qt::CaseSensitivity::CaseSensitive); //区分大小写 collator.setIgnorePunctuation(false); //不忽略标点符号 collator.setLocale(QLocale(QLocale::Chinese)); collator.setNumericMode(true); // 启用数字排序模式
return collator(left, right); });
排序结果:
a1
A1
BL1
KA1
KL1
KL2
KL10
Q1
X1
QCollator类根据排序规则算法比较字符串。以下例子是对QStringList进行数字优先且区分大小写比较排序。
例二:
#include <QStringList> #include <QCollator> #include <QDebug> int main( int argc, char *argv[] ) { QStringList myStringList = (QStringList() << "abc123" << "ABc99" << "1234abcd"); QCollator sorter; sorter.setNumericMode(true); // 启用数字排序模式 sorter.setCaseSensitivity(Qt::CaseInsensitive); // 设置区分大小写模式 std::sort(myStringList.begin(), myStringList.end(), [&](const QString& a, const QString& b) { return sorter.compare( a, b ) < 0; }); qDebug() << myStringList; }
上面的代码应输出以下内容:
("1234abcd", "ABc99", "abc123")
例三: