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")
例三:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!