当前位置: 首页 > news >正文

QT Windows 资源管理器的排序规则

如果你使用QTableView装载数据,那么一定会遇到点击表头进行排序的需求。如果不进行任何自定义排序,那么QT的默认的排序(首字符的编码进行排序)可能并不符合用户的预期。如果我们的排序规则跟Windows资源管理器保持一致,那么用户应该不会再对排序有其他异议了。

以下是使用QT的 QCollator 进行自然排序的示例代码,这个函数可以对字符串列表进行类似Windows资源管理器的自然排序,它能正确处理字符串中的数字部分,比如"file2"会排在"file10"之前。

#include <QCoreApplication>
#include <QRegularExpression>
#include <QCollator>
#include <QDebug>QStringList sortStringListNatural(const QStringList &strList, bool bAscending)
{// 创建排序器,使用当前系统区域设置QCollator qCollator;qCollator.setNumericMode(true);  // 启用数字模式,将数字作为数值而非字符串比较qCollator.setCaseSensitivity(Qt::CaseInsensitive);  // 不区分大小写// 创建结果列表的副本QStringList strResult = strList;// 使用Lambda表达式进行排序比较if (bAscending) {// 升序排序std::sort(strResult.begin(), strResult.end(),[&qCollator](const QString &str1, const QString &str2) {return qCollator.compare(str1, str2) < 0;});} else {// 降序排序std::sort(strResult.begin(), strResult.end(),[&qCollator](const QString &str1, const QString &str2) {return qCollator.compare(str1, str2) > 0;});}return strResult;
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QStringList names = {"file1.txt","file10.txt","file2.txt","File20.TXT","file3.txt","readme","文件100.dat","文件20.dat"};QStringList result = sortStringListNatural(names, true);qDebug() << "result=" << result;return a.exec();
}

输出结果:

result= ("file1.txt", "file2.txt", "file3.txt", "file10.txt", "File20.TXT", "readme", "文件20.dat", "文件100.dat")
http://www.dtcms.com/a/285469.html

相关文章:

  • 通俗易懂:什么是决策树?
  • 禁止拖动视频进度条来保障视频安全?
  • MBIST - Memory BIST会对memory进行清零吗?
  • QGIS二次开发环境搭建(qgis-3.28.6+qt5.15)
  • Telink BLE 低电压检测
  • AI IDE冲击下JetBrains作死,IDEA埋订阅陷阱
  • Redis中字符串类型的实现原理
  • 数据通信与计算机网络——模拟传输
  • websocket案例 599足球比分
  • 计算机网络知名端口分配全表(0-1023)
  • 网络原理——UDP
  • 【论文精读】基于共识的分布式量子分解算法用于考虑最优传输线切换的安全约束机组组合
  • 游戏盾在非游戏行业的应用:跨界守护网络安全的新利器
  • 初探 Web 环境下的 LLM 安全:攻击原理与风险边界
  • Mock 单元测试
  • 如何上传github(解决git的时候输入正确的账号密码,但提示认证失败)
  • 撤销和重做!支持数据驱动的事务机制啦(使用OpenGL+QT开发三维CAD)
  • LatentSync: 一键自动生成对嘴型的视频
  • 医疗人工智能的心电图分析:创新技术与临床应用
  • 【playwright篇】教程(十六)[macOS+playwright相关问题]
  • 【Linux 中断机制:工作队列与中断线程化详解】
  • 5 种可行的方法:如何将 Redmi 联系人备份到 Mac
  • RustDesk 自建中继服务器教程(Mac mini)
  • 深入了解消息队列:从基础到选型
  • 云计算虚拟化层I/O性能优化:SR-IOV与DPDK技术的整合应用
  • 电脑视频常用几种接口
  • 工业互联网六大安全挑战的密码“解法”
  • Sentinel dashboard 添加context-path后无法信息无法上传问题
  • 差分隐私机器学习:通过添加噪声让模型更安全,也更智能
  • 【甲烷数据集】Sentinel-5P 卫星获取的全球甲烷数据集-TROPOMI L2 CH₄