1.字符串追加append();

代码:

(效果和str += "d"; 相同)
QString str = "abc";
str.append("d");  // 将字符串"d"追加到str末尾

效果:

2.格式化字符串sprintf()/arg();

注意:sprintf()Qt6已经移除了,他鼓励用更安全的arg()

(也就是让通过站位字符让输出的形式看着更舒服)

Qt6以前:

代码:

%s - 字符串占位符
◦ %d - 整数占位符
◦ %f - 浮点数占位符
◦ %x - 十六进制整数占位符

QString str;
str.sprintf("%s %d", "abc", 123); // 格式化输出字符串
// 结果: "abc 123"

由于我安装的是Qt6所以没法给运行结果。

Qt6:

代码

QString str;
str = QString("姓名: %1, 年龄: %2, 分数: %3").arg("张三").arg(20).arg(95.5);
// 结果: "姓名: 张三, 年龄: 20, 分数: 95.5"

运行结果:

3.查询子串

3.1.startsWith()-从串首开始查询

注意:这个可以传入两个参数后面的那个Qt::CaseSensitive表示区分大小写;Qt::CaseInsensitive表示不区分大小写。如果不写后面那个参数,默认大小写敏感。

代码:

QString str = "abc";
bool result1 = str.startsWith("a", Qt::CaseSensitive); // 区分大小写,返回 true
bool result2 = str.startsWith("A", Qt::CaseSensitive); // 区分大小写,返回 false
bool result3 = str.startsWith("A", Qt::CaseInsensitive); // 不区分大小写,返回 true

结果:

3.2.endsWith() - 检查字符串结尾

代码:

QString str = "abc.txt";
bool result1 = str.endsWith(".txt", Qt::CaseSensitive); // 返回 true
bool result2 = str.endsWith(".TXT", Qt::CaseSensitive); // 返回 false
bool result3 = str.endsWith(".TXT", Qt::CaseInsensitive); // 返回 true

结果:

3.3.contains() - 检查是否包含子串(从前向后)

代码:

contains() - 检查是否包含子串QString str = "Hello World";
bool result1 = str.contains("world", Qt::CaseSensitive); // 返回 false
bool result2 = str.contains("world", Qt::CaseInsensitive); // 返回 true
bool result3 = str.contains("llo", Qt::CaseSensitive); // 返回 true

结果:

3.4.indexOf() - 查找子串位置

代码:

QString str = "Hello World";
int pos1 = str.indexOf("World", 0, Qt::CaseSensitive); // 返回 6
int pos2 = str.indexOf("world", 0, Qt::CaseSensitive); // 返回 -1(未找到)
int pos3 = str.indexOf("o", 0, Qt::CaseSensitive); // 返回 4(第一个'o'的位置)

结果:

3.5lastIndexOf() - 从后向前查找子串位置

代码:

QString str = "Hello World";
int pos1 = str.lastIndexOf("o", -1, Qt::CaseSensitive); // 返回 7(最后一个'o'的位置)
int pos2 = str.lastIndexOf("l", -1, Qt::CaseSensitive); // 返回 9(最后一个'l'的位置)

结果:

4.字符串比较

4.1compare() - 比较两个字符串

代码:

QString str1 = "apple";
QString str2 = "Apple";

int result1 = QString::compare(str1, str2, Qt::CaseSensitive); // 返回正数(区分大小写)
int result2 = QString::compare(str1, str2, Qt::CaseInsensitive); // 返回 0(不区分大小写)

// 也可以使用成员函数形式
int result3 = str1.compare(str2, Qt::CaseSensitive); // 返回正数

结果:

4.2.QCollator类-基于区域感知比较

这个大家平时可能不常用这里解释一下区域感知:区域感知是一种根据特定语言和文化规则进行字符串比较的方法,它确保了排序结果符合用户的期望和文化习惯。

(也就是你自己通过QCollator定义比较方式)

下面以最常用的文件排序为例

代码:头文件:

#include <QCollator>
#include <QStringList>//这个是字符串组
QStringList items = {"file10.txt", "file2.txt", "file1.txt", "file20.txt"};
    
    QCollator collator;
    collator.setNumericMode(true); // 启用数字模式
    
    std::sort(items.begin(), items.end(), collator);
    
    qDebug() << "数字模式排序:" << items;

结果:

5.将字符串转换为想要的数据类型

5.1.toInt() - 转换为整数

代码:

  QString str="25";
    int num=str.toInt();
    qDebug()<<num;

结果:

这里还可以传入一个bool类型的参数来验证抓换是否成功:

代码:
 

   QString str="25";
    bool ok;
    int num=str.toInt(&ok);
    if(ok)
    {
         qDebug()<<num<<"转换成功";
    }
    else

    {
         qDebug()<<"转换失败";
    }

结果:

5.2.大小写转换

代码:

  QString str = "Hello World! 123 ABC";
    QString lowerStr = str.toLower();

    qDebug() << "原始字符串:" << str;
    qDebug() << "转换为小写:" << lowerStr;

结果:

toUpper() - 转换为大写语法一样

5.3其他类型

 toDouble() - 转换为双精度浮点数

toLong() - 转换为长整数

toFloat() - 转换为单精度浮点数

toShort() - 转换为短整数

toULongLong() - 转换为无符号长长整数

toUtf8()-转换为utf-8编码 QByteArray bytes = str.toUtf8();

语法都一样这里不再赘述。

5.3进阶

5.3.1使用默认值和错误处理

代码::

 QString str = "invalid";
    bool ok;
    
    // 使用默认值处理转换失败
    int value = str.toInt(&ok);
    if (!ok) {
        value = 0; // 设置默认值
        qDebug() << "转换失败,使用默认值0";
    }

结果:

5.3.2 批量转换字符串列表

代码:

    QStringList numberStrings = {"1", "2", "3", "4", "5"};
    QList<int> numbers;
    bool allOk = true;

    for (const QString &str : numberStrings) {
        bool ok;
        int value = str.toInt(&ok);
        if (ok) {
            numbers.append(value);

        } else {
            allOk = false;
            qDebug() << "转换失败:" << str;
        }
    }

    for( int i=0;i<numbers.size();i++)
    {
        qDebug()<<" "<<numbers[i];
    }

结果:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐