【QT学习四】Qt 的字符串类QString

目录

目录

1、概述

1.1、Qt的字符串类

1.2、QString的几个优点。

1.3、头文件 

1.4、与QbyteArray

2、QString的一些基本操作

2.1、初始化

2.2、字符串操作


1、概述

1.1、Qt的字符串类

        标准的c++提供了两种字符串:一种是C语言风格的字符串,即以‘\0’结尾的字符数组;另一种是std::string,即标准模板库中的类。Qt则提供了自己的字符串实现Qstring,相比较QString类的功能更强大。

        QString存储字符串采用的是Unicode码,每一个字符是一个16位的QChar,所以QString可以处理中文字符,并且一个汉字可以看作是一个字符。

1.2、QString的几个优点。

        QString使用隐式共享(写时复制)来减少内存使用并避免不必要的数据复制。隐式共享技术可以大大降低对内存的开销及CPU资源的消耗,很大程度提高应用程序的运行效率。

        QString提供丰富的操作,查询和转换函数,以及高效的内存分配策略等多方面的优化。

        QString不用担心内存分配以及关于'\0'结尾的这些注意事项,QString中间是可以包含'\0'符号的,而length()函数则会返回整个字符串的长度,而不仅仅是从开始到'\0'的长度。

1.3、头文件 

Header:  #include <QString>

qmake:  QT += core

1.4、与QByteArray

        除了QString,Qt还提供了QByteArray类来存储原始字节和传统的8位“\0”结尾字符串。对于大多数目的,QString是您要使用的类。它在Qt API中使用,Unicode支持确保了如果您想在某个时候扩展应用程序的市场,您的应用程序将易于翻译。

        QByteArray适用的两种主要情况是需要存储原始二进制数据时,以及内存保护至关重要时(如嵌入式系统)。

2、QString的一些基本操作

2.1、初始化

        初始化QString的一种方法是简单地将const char*传递给其构造函数。例如,以下代码创建了一个大小为5的QString,其中包含数据“Hello”

QString str = "Hello";

        QString使用fromUtf8()函数将const char*数据转换为Unicode。

        在所有采用const char*参数的QString函数中,const char*被解释为以UTF-8编码的经典C样式“\0”结尾的字符串。const char*参数为nullptr是合法的。

        还可以将字符串数据作为QChars数组提供:

static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 };

QString str(data, 4);

        QString对QChar数据进行深度复制,因此可以稍后修改它,而不会产生副作用。(如果出于性能原因,不想获取字符数据的深度副本,请改用QString::fromRawData()。)

        另一种方法是使用resize()设置字符串的大小,并初始化每个字符的数据字符。QString使用基于0的索引,就像C++数组一样。要访问特定索引位置的字符,可以使用operator []()。对于非常量字符串,operator []()返回对可以在赋值左侧使用的字符的引用。例如:

 QString str;

 str.resize(4);

 str[0] = QChar('U');

 str[1] = QChar('n');

 str[2] = QChar(0x10e3);

 str[3] = QChar(0x03a3);

        对于只读访问,另一种语法是使用at()函数:

 QString str;

 for (int i = 0; i < str.size(); ++i) {

     if (str.at(i) >= QChar('a') && str.at(i) <= QChar('f'))

         qDebug() << "Found character in range [a-f]";

 }

        at()函数可以比operator []()更快,因为它不会导致深度复制。或者,使用left()、right()或mid()函数一次提取几个字符。

        QString可以嵌入“\0”字符(QChar::Null)。size()函数始终返回整个字符串的大小,包括嵌入的“\0”字符。

        调用resize()函数后,新分配的字符具有未定义的值。要将字符串中的所有字符设置为特定值,请使用fill()函数。

        QString提供了数十个重载,旨在简化字符串的使用。例如,如果要将QString与字符串文字进行比较,可以编写如下代码,它将按预期工作:

 QString str;

 if (str == "auto" || str == "extern"

         || str == "static" || str == "register") {

     // ...

 }

2.2、字符串操作

       (1)QString::append()函数的功能是实现在一个字符串的末尾追加另一个字符串,与“+=”操作符功能一样。

实例:

QString str = "Hello, ";

QString str1 = "从此不归路!";

str.append(str1);                      //str = "Hello, 从此不归路!";

str.append("从此不归路!");             //str1 ="Hello, 从此不归路!";

       (2)QString::arg()函数可以进行对字符串的组合,该函数的重载可以处理很多数据类型,并且是类型安全的。

QString strName = “Lilei”

QString strArg = QString("This is %1 de %2 .").arg(strName).arg(“Qt xuexibiji”);

// strArg = This is Lilei de Qt xuexibiji .;

       (3)QString 还提供了其他字符串的组合方法.

QString::prepend(); // 在原字符串的开头位置插入另一个字符串

QString::insert();   // 在原字符串的特定位置插入另一字符串

QString::replace(); // 用给定的字符串替代原来的字符串的某一些字符

QString::trimmed(); // 清除字符串的两端空白字符('\n' \r' '\t' ' ' 等)

QString::simplified();  //  清除字符串两端的空白字符,用单个的空格字符 ' ' 替代字符串里面的空白字符。

(4)字符串转换

QString::toInt();\\字符串转整形;

QString::toLong();\\字符串转长整形

QString::toShort();\\ 字符串转短整形

QString::toUInt();\\ 字符串转无符号整形

QString::toULong();\\ 字符串转无符号长转整形

QString::toDouble();\\ 字符串转双精度数值

QString::toFloat();\\ 字符串转单精度数值

        std::string QString::toStdString() const ;\\此函数返回带有此QString中包含的数据的std::string对象。使用toUtf8()函数将Unicode数据转换为8位字符。此方法在将QString传递给接受std::string对象的函数时非常有用。

(5)字符串的判空

QString().isEmpty();            // 返回 true

QString("").isEmpty();          // 返回 true

QString(" ").isEmpty();         // 返回 false

QString("string").isEmpty();       // 返回 false

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从此不归路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值