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)) {
}