QString 常见方法+原理

QString存储16位2字节QChar类型的字符串,每个字符类型是QChar,每个QCha对应一个UTF-16代码。

区别:

  • std::string 的字符是char类型,8位一字节长度(用的UTF-8)
  • QString 的字符是QChar类型,16位一字节长度(用的UTF-16)

注:QString 和 std::string编码格式不一样,不能直接相符操作,得转码后才能用。

QString和std::string互相转换

1.将QString转换为std::string

  • 使用 .toStdString()方法。

eg:

std::string str = qstring.toStdString();
  • 使用 toUtf8().constData() 方法: 这将QString转换为 UTF-8 编码的 const char*, 然后在将其转换为 std::string。
QStringList path = "aaaaaa";
log_info << "path: " << path.toUtf8().constData();

2.将std::string转换为Qstring

  • 使用fromStdString() 静态方法。
std::string str = "aaa"; 
QString qstr = QString::fromStdString(str);

  • 使用fromUtf8()静态方法。
QString QTStringUtils::StdStr2QStr(const std::string& str) {
  return QString::fromUtf8(str.c_str());
}

注意:需要注意的是,进行字符串转换时可能会涉及到字符编码的转换问题。如果原始字符串中包含非 ASCII 字符或多字节字符,确保在转换过程中选择合适的字符编码以避免数据损失。另外,转换过程中还需要考虑字符串所使用的字符集和编码方式是否能够正确处理转换过程中的字符。因此,在进行字符串转换时,要特别关注字符编码的一致性和正确性。

隐式共享

QT中的许多C++类 使用 隐式数据共享 来实现资源最大化使用和最小化复制代价。隐式共享类在作为参数传递时既安全又高效,因为只传递指向数据的指针,并且仅当函数写入数据时(既"写时复制") 才会复制数据。

构造函数,赋值拷贝函数

操作函数(增删查改替)

Null字符串和Empty字符串的区别

  QString().isNull();       // return true;
  QString().isEmpty();      // return true;
  
  QString("").isNull();     // return false;
  QString("").isEmpty();    // return true;
  
  QString("a").isNull();    // return false;
  QString("a").isEmpty();   // return false;

更高效的字符串构造

许多字符串在编译时是已知的,但是琐碎的构造函数QString("Hello")将复制字符串的内容,将内容视为Latin-1。为了避免这种情况,可以使用QStringLiteral 在编译时直接创建所需要的数据。从文本构造QString不会在运行时产生任何开销。

QString qstr1 = "AAAAAAA";
QString qstr2 = "(";
QString qstr3 = ")";
if (qstr1.startsWith(qstr2 + "BBB" + qstr3)) {
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白又菜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值