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

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

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

cpp 复制代码
#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();
}

输出结果:

bash 复制代码
result= ("file1.txt", "file2.txt", "file3.txt", "file10.txt", "File20.TXT", "readme", "文件20.dat", "文件100.dat")
相关推荐
m0_726365837 小时前
哈希分分预测系统 打造自适应趋势分析「Python+DeepSeek+PyQt5」
python·qt·哈希算法
2501_925435528 小时前
怎么彻底禁止Windows更新?一键彻底关闭win11自动更新的工具
windows
new_zhou8 小时前
vs2019+qt工程中生成dump文件及调试
开发语言·qt·visual studio·dump调试
hqwest9 小时前
码上通QT实战16--监控页面08-连接后状态处理
qt·串口·信号与槽·serialport·通信过程·打开串口·com1
dust_and_stars10 小时前
ubuntu24使用apt安装VS-code-server code-server
linux·服务器·windows
郑泰科技10 小时前
快速地图匹配(FMM)在轨迹可视化中的核心应用
windows·python·交通物流
梦星辰.11 小时前
超大 JSONL 数据集交互式查看器 Linux便捷工具
linux·windows·microsoft
hqwest11 小时前
码上通QT实战15--监控页面07-打开串口连接
开发语言·qt·多线程·signal·slot·emit·信号和槽
取个名字太难了a12 小时前
插入APC
windows
CS Beginner13 小时前
【单片机】嵌入式显示屏开发框架:QT、SDL、LVGL 深度解析
单片机·嵌入式硬件·qt