精华内容
下载资源
问答
  • QCollator
    更多相关内容
  • 文章目录 场景及解决方案 排序规则 QCollator类 场景及解决方案 项目中,经常用到一些对目录文件进行排序显示的需求,然后遇到一些有规则命名的文件时,经常会出现一些意想不到的排序结果,比如: 这时,我们就需要...

    场景及解决方案

    项目中,经常用到一些对目录文件进行排序显示的需求,然后遇到一些有规则命名的文件时,经常会出现一些意想不到的排序结果,比如:
    在这里插入图片描述

    这时,我们就需要做一些改进工作了,其实就是对目录下的文件定制一个排序规则,

    排序规则

    代码如下:

    QDir dir("./files");
    if(!dir.exists())
    {
    qDebug() << “path not exist!”;
    return 0;
    }
    dir.setFilter(QDir::Files | QDir::NoSymLinks);
    QStringList files = dir.entryList(dir.filter() | QDir::NoDotAndDotDot);
    QCollator collator;
    collator.setNumericMode(true);

    std::sort(files.begin(), files.end(),
    [& collator](const QString & str1, const QString & str2)
    {
    return collator.compare(str1, str2) < 0;
    });

    for(const auto &v: files)
    {
    qDebug() << v;
    }

    结果:
    在这里插入图片描述

    QCollator类

    QCollator使用QLocale和可选的排序策略进行初始化。它尝试用指定的值初始化collator。然后,可以使用collator以依赖于语言环境的方式对字符串进行比较和排序。

    QCollator对象可以与基于模板的排序算法(如std::sort)一起使用,对qstring列表进行排序。

    除了区域设置和排序策略外,还可以设置几个影响排序结果的可选标志。

    //大小写
    void setCaseSensitivity(Qt::CaseSensitivity sensitivity)
    //标点符号
    void setIgnorePunctuation(bool on)
    //QLocale在其构造函数中使用语言/国家对进行初始化,并提供与QString中类似的数字到字符串和字符串到数字转换函数。
    void setLocale(const QLocale &locale)
    //当on设置为true时启用数字排序模式。
    //这将允许对数字进行正确排序,例如,99之后进行100次排序。
    //默认情况下,此模式处于关闭状态。
    void setNumericMode(bool on)
    //排序键
    QCollatorSortKey sortKey(const QString &string) const
    
    展开全文
  • Qt5自带QCollator和QLocale库,结合qSort()函数,在VS2015开发工具下实现排序,支持中文英文排序,其中中文按照首字母排序,也可以设置按找笔画排序
  • Qt 之 文件与文件夹

    2021-03-31 20:56:42
    } } QCollator collator; collator.setNumericMode(true); std::sort(m_dataList.begin(), m_dataList.end(), [& collator](const QString & str1, const QString & str2) { return collator.compare(str1, str2) >...

    QFile与QFileInfo

    1. QIODevice:所有 I/O 设备类的父类,提供了字节块读写的通用操作以及基本接口;
    2. QFlie:访问本地文件或者嵌入资源;
    3. QTemporaryFile:创建和访问本地文件系统的临时文件;
    4. QFileDevice:Qt5类,提供了有关文件操作的通用实现。

    这其中,QProcess、QTcpSocket、QUdpSoctet和QSslSocket是顺序访问设备。所谓“顺序访问”,是指它们的数据只能访问一遍:从头走到尾,从第一个字节开始访问,直到最后一个字节,中途不能返回去读取上一个字节;QFile、QTemporaryFile和QBuffer是随机访问设备,可以访问任意位置任意次数,还可以使用QIODevice::seek()函数来重新定位文件访问位置指针。

    QFile file("in.txt");
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
            qDebug() << "Open file failed.";
            return -1;
        } else {
            while (!file.atEnd()) {
                qDebug() << file.readLine();
            }
        }
     
        QFileInfo info(file);
        qDebug() << info.isDir();
        qDebug() << info.isExecutable();
        qDebug() << info.baseName();
        qDebug() << info.completeBaseName();
        qDebug() << info.suffix();
        qDebug() << info.completeSuffix();
    
    QFileInfo fi("/tmp/archive.tar.gz");
    QString base  = fi.baseName();  // base = "archive"
    QString cbase = fi.completeBaseName();  // cbase = "archive.tar"
    QString ext   = fi.suffix();  // ext = "gz"
    QString ext   = fi.completeSuffix();  // ext = "tar.gz"
    

    QDataStream

    QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)

    QFile file("file.dat");
    file.open(QIODevice::WriteOnly);
    QDataStream out(&file);
    out << QString("the answer is");
    out << (qint32)42;
    file.close();
    
    QFile file("file.dat");
    file.open(QIODevice::ReadOnly);
    QDataStream in(&file);
    QString str;
    qint32 a;
    in >> str >> a;
    

    //保证Qt的版本一致,指定版本和魔术字

    // 写入魔术数字和版本
    out << (quint32)0xA0B0C0D0;
    out << (qint32)123;
     
    out.setVersion(QDataStream::Qt_4_0);
    

    常用功能:

    #程序路径

    qDebug() << QGuiApplication::applicationDirPath();
    qDebug() << QGuiApplication::applicationFilePath();
    qDebug() << QDir::currentPath();
    
    //输出
    "C:/wmm/zyb/Z03/build-Z03-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug/debug"
    "C:/wmm/zyb/Z03/build-Z03-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug/debug/Z03.exe"
    "C:/wmm/zyb/Z03/build-Z03-Desktop_Qt_5_14_2_MSVC2017_64bit-Debug"
    

    #文件夹内文件排序

    QStringList LocalCacheData::initCacheData(const QString &path)
    {
        m_dataList.clear();
        if(!path.isEmpty())
            m_curDirPath = path;
        QDir dir(m_curDirPath);
        if(!dir.exists())
        {
            return QStringList();
        }
    
        dir.setFilter(QDir::Files | QDir::NoSymLinks);
        QFileInfoList list =dir.entryInfoList();
        for(int i=0; i < list.count(); i++)
        {
            QFileInfo file_info = list.at(i);
            QString suffix = file_info.suffix();
            if(QString::compare(suffix, QString("jpg"),Qt::CaseInsensitive) == 0)
            {
                QString absolute_file_path=  file_info.absoluteFilePath();
                m_dataList.append( absolute_file_path);
            }
        }
    
        QCollator collator;
        collator.setNumericMode(true);
    
        std::sort(m_dataList.begin(), m_dataList.end(),
                  [& collator](const QString & str1, const QString & str2)
        {
            return collator.compare(str1, str2) > 0;
        }
        );
    
        return m_dataList;
    }
    

    #删除文件

    void removeLocalFile(const QString &path)
    {
        QFile tmp(path);
        tmp.remove();
    }
    

    #判断文件是否存在

    bool existImg(const QString &path)
    {
        QFileInfo file(path);
        return  file.exists();
    }
    

    #创建文件夹

    void creatDir(const QString &path)
    {
        QDir dir;
        if(!dir.exists(path)){
            bool b = dir.mkdir(path);
            qDebug() << "creat Dir "<<path << "res= " << b;
        }
    }
    

    #创建多级文件夹

    QString LocalCacheData::creatMutiDir(const QString &path)
    {
        QDir dir(path);
        if ( dir.exists(path)){
            return path;
        }
        QString parentDir = creatMutiDir(path.mid(0,path.lastIndexOf('/')));
        QString dirname = path.mid(path.lastIndexOf('/') + 1);
        QDir parentPath(parentDir);
        if ( !dirname.isEmpty() )
            parentPath.mkpath(dirname);
        return parentDir + "/" + dirname;
    }
    

    #创建文本文件

    void creatFile(const QString &path)
    {
        QFile file(path);
        if(!file.exists())
        {
            if(file.open(QIODevice::WriteOnly |QIODevice::Text )){
            }
            else {
                qDebug() << "creatFile failed" << path;
            }
            file.close();
        }
    }
    

    #删除文件夹内所有文件

    void clearDir(const QString &dir)
    {
        const QFileInfoList entries = QDir(dir).entryInfoList(QDir::AllEntries | QDir::Hidden);
        foreach (const QFileInfo &fi, entries) {
            if (fi.isSymLink() || fi.isFile()) {
                QFile f(fi.filePath());
                if (!f.remove()) {
                    const QString errorMessage = QCoreApplication::translate("QInstaller",
                                                                             "Cannot remove file \"%1\": %2").arg(
                                QDir::toNativeSeparators(f.fileName()), f.errorString());
                    qWarning()<< errorMessage;
                }
            }
        }
    }
    
    展开全文
  • 有一组字符串: {"L5A90E","L46c80","L5A91E","L46C80"} 希望经过排序后的结果为: ("L5A90E", "L5A91E", "L46c80", "L46C80") 代码如下: ... QCollator collator; collator.setNumericMode(true

    有一组字符串:

    {"L5A90E","L46c80","L5A91E","L46C80"}
    

    希望经过排序后的结果为:

    ("L5A90E", "L5A91E", "L46c80", "L46C80")
    

    代码如下:

    void stringListSortDemo(void)
    {
        QStringList sl = {"L5A90E","L46c80","L5A91E","L46C80"};
        QCollator collator;
        collator.setNumericMode(true); // 数字模式
        collator.setCaseSensitivity(Qt::CaseInsensitive); // 大小写敏感
        std::sort(sl.begin(), sl.end(), collator);///< 使用std::sort函数
        qDebug() << sl; // 输出("L5A90E", "L5A91E", "L46c80", "L46C80")
    }
    

    另外网上一种支持中文排序的配置为:

    void stringListSortDemo(void)
    {
        QStringList sl = {"人L5A90E","啊L46c80","L5A91E","L46C80"};
        QCollator collator(QLocale(QLocale::Chinese));// < 选择语言为中文
        collator.setNumericMode(true);
        collator.setCaseSensitivity(Qt::CaseInsensitive);
        std::sort(sl.begin(), sl.end(), collator);// < 使用std::sort函数
        DLOGFL() << sl; // 输出("L5A91E", "L46C80", "啊L46c80", "人L5A90E")
    }
    
    展开全文
  • Qt 中文字符排序 ... QCollator collator(local); QStringList list; list << QStringLiteral("朱") << QStringLiteral("爱") << QStringLiteral("你") << QStringLite
  • 在某一工程所在路径下创建一个文件夹,将工程数据以excel形式导出,并将excel保存到该文件夹中。 获取路径 创建新的文件夹肯定会遇到名称重复的问题,下面有两种方法可以达到在当前目录下文件不重名的目的。...
  • Collator按照中文名排序

    千次阅读 2019-04-30 07:03:34
    用来排序中文姓名或者各种语言杂糅的对象集合 首先我们来设定数据,这就是待排序集合 List<String> list = new ArrayList<String>(); list.add("李方"); list.add("郭云2");...list.a...
  • Collator实现中文排序

    2021-01-06 11:28:48
    1.建一个中文排序的工具类 /** * 比较器工具类 */ public class ComparatorUtils { //当前环境设置成 CHINA 中文 private static Collator collator=Collator.getInstance(Locale.CHINA); ...
  • Qt文件名排序

    千次阅读 2020-09-08 10:09:57
    QCollator collator; collator.setNumericMode(true); std::sort(fileList.begin(), fileList.end(), [& collator](const QString & str1, const QString & str2) { return collator.compare(str1, str2) ; } ); ...
  • QT中英文混合排序

    2018-09-30 10:08:38
     QCollator collator(local);  QStringList stringList;  stringList&lt;&lt;QString::fromLocal8Bit("天地图")  &lt;&lt;QString::fromLocal8Bit("微软")...
  • bool bIsDir; QStringList filters; filters << "*.log" << "*.dmp" <<... QFileInfoList fileinfolist = dir.entryInfoList(filters, QDir::Files | QDir::AllDirs | QDir::NoDotAndDotDot);...
  • 但是在使用这种方法对含有中文的项进行排序的时候,发现失灵了,结果不是自己期望的,后来查阅了资料,发现了一种不错的解决方法,使用QLocale和QCollator以及std::sort进行排序,附上代码如下: QLocale cn...
  • QT记录

    2020-09-12 15:23:26
    QCollator collator; collator.setNumericMode(true); std::sort(entryList.begin(), entryList.end(), collator); 4.自定义QGraphicsRectItem https://blog.csdn.net/qq_40586164/article/details/108704205 5....
  • 关于比较器Comparator排序时间的问题

    千次阅读 2019-12-12 10:24:55
    最近涉及一个需要按照时间排序的问题,由于在数据库层面order by太麻烦,所以就准备在代码层面解决,但是过程中遇到了一个很有意思的问题。 先介绍一下用的比较器的api: o1大于o2,则返回正数;...
  • 前言:类 Collator简介Collator 类执行区分语言环境的 String 比较。使用此类可为自然语言文本构建搜索和排序例程。 Collator 是一个抽象基类。其子类实现具体的整理策略。Java 平台目前提供了 RuleBasedCollator ...
  • 解决QT4到QT5中出现错误error: QApplication: No such file or directory #include “QApplication”在QT从QT4到QT5,移植的过程中,编译会遇到这样的错误,主要是QT5中默认没有加载这些组建解决方法: ...
  • 近期在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似以下这种错误: (.text+0x13): undefined reference to `func'   关于undefined reference这种问题,大家事实上常常会遇到...
  • Qt 中的中英文混排

    2014-06-24 09:18:52
    在安装了东亚字体的英文操作系统中,当Qt显示中英文混排时,无法让英文显示英文字体,中文显示中文字体。解决办法是在Qt中将中文字体设置系统缺省字体。 以windows操作系统为例,创建窗口前先运行下面代码: ...
  • Qt5中可以通过qSort接口,结合QLocale类和QCollator类,可以对中文,英文,数字进行排序,但默认排序顺序为数字、英文、中文,但如果需要中英文混合排序的话,需要另外封装方法实现。 这种方法就是先获取中文的首...
  • #include <QCollator> #include #include #include #include #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) ...
  • 运行用release
  • Qt XDF阅读管理

    2021-07-09 16:38:26
    QCollator collator(cn); std::sort(mNameLst.begin(), mNameLst.end(), collator); foreach (QString name, mNameLst) { addListWidgetItem(name, mFileMap.value(name)); } updateLabel(); } void MainWindow::...
  • 用于Rust语言的Qt5绑定。 qt.rs该项目提供的绑定允许从Rust编程语言使用QT Gui工具箱。 用于Rust语言的Compi Qt5绑定。 qt.rs该项目提供的绑定允许从Rust编程语言使用QT Gui工具箱。 ...-example按钮支持的Qt5模块Core ...
  • 教程 很高兴见到你! 以下是制作出色图表的4个步骤:) 步骤1:构建和安装Git环境(可选) 访问Git官方网站以在您的操作系统中安装git 然后您可以像下面的代码一样从github复制我的包 git clone ...
  •  represented by a MIME type string QBitArray Array of bits QByteArray Array of bytes QByteArrayList List of byte arrays QCache Template class that provides a cache QCollator Compares...
  • RTSPCamViewer

    2021-03-04 17:29:06
    RTSPCamViewer
  • qt.go 无需CGO的Go(Qt5)绑定Go(Golang),旨在实现Go的本机编译速度。 Qt.Go使用FFI而不是使用常见的绑定和繁重的C ++包装代码来迫使您一次又一次地编译和链接,而是使用FFI,因此仅存在运行时依赖性。...
  • QCborKnownTags, QCborSimpleType, QCborStreamReader, QCborStreamWriter, QChildEvent, QCollator, QCollatorSortKey, QCommandLineOption, QCommandLineParser, QConcatenateTablesProxyModel, QCoreApplication,...
  • Qt翻译

    2020-04-21 00:09:06
    QCollator:基于不同区域来对比字符串的类。 QCollatorSortKey:用于加速一个字符串的排序。 翻译流程框架图 大致的流程是这样的:首先源代码产生 ts 文件,然后送给 Qt Linguist(Qt语言家)这个 Qt 自带的小工具...

空空如也

空空如也

1 2 3 4 5
收藏数 89
精华内容 35
关键字:

QCollator