Qt基础(一)QString 用法

QString 类保存 16位Unicode值,提供了丰富的操作、查询和转换等函数。

该类还进行了使用隐式共享、高效的内存分配策略等多方面的优化。

1. 字符串拼接

使用 + 运算符

// 字符串拼接
// + 运算符
static void StringConnect1()
{
    QString str1 = "Welcome ";
    str1 = str1 + "to you! ";
    qDebug() << str1; // "Welcome to you! "

    QString str2 = "Hello, ";
    str2 += "world! ";
    qDebug() << str2; // "Hello, world! "
}

QString::append() 函数

// 字符串拼接
// QString::append()
static void StringConnect2()
{
    QString str1 = "Welcome ";
    QString str2 = "to ";
    str1.append(str2);
    str1.append("you! ");
    qDebug() << str1; // "Welcome to you! "
}

2. 格式化字符串

QString::asprintf() 函数

// 字符串组合
// QString::asprintf()
static void StringConnect3()
{
    QString str;
    // Qt 5.14 开始 sprintf 废弃,改用 asprintf 代替
    str = QString::asprintf("%s", "Welcome "); // str = "Welcome "
    str = QString::asprintf("%s", " to you! "); // str = "to you!
    str = QString::asprintf("%s %s", "Welcome ", "to you! ");
    qDebug() << str; // "Welcome to you! "
}

QString::arg() 函数

static void StringConnect4()
{
    QString str;
    // arg多个同类型的参数合并在一起
    str = QString("%1 %2 %3").arg("Welcome", "to you!").arg(1998);
    qDebug() << str; // "Welcome to you! 1998"
}

Use multi-arg instead报错解决方法

3. 其它字符串组合函数

static void StringConnect5()
{
    QString str = "Welcome";

    // 1. instert()函数:在原字符串特定的位置插入另一个字符串
    str.insert(str.length(), " to you! ");
    qDebug() << str; // "Welcome to you! "

    // 2. prepend()函数:在原字符串的开头插入另一个字符串
    str.prepend("Hello, ");
    qDebug() << str; // "Hello, Welcome to you! "

    // 3. replace()函数:用制定的字符串替代原字符串中的某些字符
    str.replace("you", "the zoo");
    qDebug() << str; // "Hello, Welcome to the zoo! "
}

4. 移除空白字符

// 移除空白字符
// 空白字符是指 \r \n \t 空格等
static void StringConnect6()
{
    QString str = " Welcome to the zoo!    \t \n";

    // 1. trimmed()函数:移除字符串两端的空白字符,中间的不变
    str = str.trimmed();
    qDebug() << str; // "Welcome to the zoo!"

    // 2. simplified()函数:移除字符串两端的空白字符,并用带个 " " 代替字符串中出现的空白字符
    str = " Welcome to\t\rthe zoo!  \t \n";
    str = str.simplified();
    qDebug() << str; // "Welcome to the zoo!"
}

5. 查询字符串数据

static void StringFind()
{
    QString str = "Welcome to the zoo!";

    // 1. startsWith() 以指定字符串开头
    qDebug() << str.startsWith("Welcome");
    // 忽略大小写
    qDebug() << str.startsWith("welcome", Qt::CaseInsensitive);

    // 2. endsWith() 以指定字符串结尾
    qDebug() << str.endsWith("zoo!");
    qDebug() << str.endsWith("ZOO!", Qt::CaseInsensitive);

    // 3. 是否包含某个字符串
    qDebug() << str.contains("to");

    // 4. 比较字符串是否相等,可以忽略大小写,相等则返回0
    // 还可用 < <= > >= == 等运算符
    qDebug() << str.compare("Welcome to the zoo!");
}

6. 字符串转换

和数字类型转换

// 字符串转换
static void StringCastNumber()
{
    QString str = "123";
    bool ok;

    // 转换为数字类型,还有toDouble、toLong等
    // 第一个参数返回是否转换成功,第二个参数指定转换基数
    int hex = str.toInt(&ok, 16); // 转为十六进制 hex=291
    int dec = str.toInt(&ok, 10); // 转为10进制 dec=123

    qDebug() << "hex: " << hex;
    qDebug() << "dec: " << dec;
}

字符编码转换

static void StringCastCodec()
{
    // 字符编码转换
    QString str1 = "hello, 你好";
    qDebug() << "utf-8 str: " << str1;

    // 返回一个ASCII编码的8位字符串
    QByteArray ba = str1.toLatin1();
    qDebug() << "ascii byte array: " << ba;

    // 返回一个UTF-8编码的8位字符串
    ba = str1.toUtf8();
    qDebug() << "utf-8 byte array: " << ba;

    // utf-8 编码器
    QTextCodec *utf8_codec = QTextCodec::codecForName("utf-8");
    // gbk 编码器
    QTextCodec *gbk_codec = QTextCodec::codecForName("gbk");

    // utf-8 to unicode
    QString string = utf8_codec->toUnicode(ba);
    qDebug() << "utf-8 to unicode: " << string;

    // 返回一个系统本地编码的8位字符串(Windows上为gbk)
    ba = str1.toLocal8Bit();
    qDebug() << "gbk byte array: " << ba;

    // gbk to unicode
    string = gbk_codec->toUnicode(ba);
    qDebug() << "gbk to unicode: " << string;

    // unicode to utf-8
    QByteArray encodedString = utf8_codec->fromUnicode(string);
    qDebug() << "unicode to utf-8: " << QString(encodedString);    
}

7. 字符串判空

// NULL字符串和空(empty)字符串的区别
// 一个NULL字符串一定是空字符串,反之则未必成立
static void StringIsEmpty()
{
    QString str = "empty str";

    // NUL字符串:QString默认构造函数或使用 (const char*)0 作为参数创建的 QString 对象
    QString().isNull(); // true
    QString().isEmpty(); // true

    // 空字符串:大小为0的字符串
    QString("").isNull(); // false
    QString("").isEmpty(); // true
}

8. 其它

QT控制台输出及中文乱码问题

在 main.cpp 头文件输入

#pragma execution_character_set("utf-8")
posted @ 2024-05-26 19:52  jixhua  阅读(489)  评论(0编辑  收藏  举报