目录
目录
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