QString 详细介绍(一)

        C语言字符串类是以“\0”为结尾的字符数据进行表示;C++字符串是用类std::string进行表示。而Qt提供了一个更为强大的QString类。其能够实现编程过程中需要的大多数字符串操作。QString存储了一个16bit 的 QChar 数字,每个 QChar 对应一个 Unicode 4.0 字符。

        Unicode 是一种国际标准,支持当今使用的大多数书写系统。它是 US-ASCII (ANSI X3.4-1986) 和 Latin-1 (ISO 8859-1) 的超集,所有 US-ASCII/Latin-1 字符都位于相同的代码位置。

        在后台,QString 使用隐式共享(写入时复制)来减少内存使用并避免不必要的数据复制。这也有助于减少存储 16 位字符而不是 8 位字符的固有开销。

        除了QString,Qt还提供了QByteArray类来存储原始字节和传统的8位“0”终止字符串。在大多数情况下,QString 是您想要使用的类。它在整个Qt API中使用,Unicode支持确保您的应用程序易于翻译,如果您想在某个时候扩展应用程序市场。QByteArray 适合的两种主要情况是需要存储原始二进制数据以及内存保护时(如在嵌入式系统中)至关重要。

1、字符串操作类

QString 初始化:

一种初始化方式,是向QString构造函数中传入一个const char*数组。例如:

QString str = "Hello World";

QString 可以通过 fromUtf8()函数将 const char* 数组转换为 Unicode。

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

另一种方式,是向QString 数组传入一个 QChar数组,例如:

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

QString 会制作 QChar 数据的深层拷贝,因此您可以稍后对其进行修改而不会遇到副作用。(如果出于性能原因,您不想创建字符数据的深层副本,请改用 QString::fromRawData() 。

另一种方法是使用 resize() 设置字符串的大小,并初始化每个字符的数据字符。QString 使用从 0 开始的索引,就像C++数组一样。要访问特定索引位置的字符,可以使用运算符 []()。在非常量字符串上,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="abcdefgh";

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="auto";

if (str == "auto" || str == "extern"
        || str == "static" || str == "register") {
    // ...
}

还可以将字符串文本传递给将 QStrings 作为参数的函数,调用 QString(const char *) 构造函数。类似地,您可以使用 qPrintable() 宏将 QString 传递给采用 const char * 参数的函数,该宏将给定的 QString 作为 const char * 返回。这相当于调用 <QString>.toLocal8Bit().constData()。

后续公众号会发布系列教程,更多内容请关注公众号:程序猿学习日记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序猿学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值