介绍
QString存储16位QChar的字符串,其中每个QChar对应一个UTF-16代码单元。(码值大于65535的Unicode字符使用代理对存储,即两个连续的qchar。)
Unicode是一种国际标准,支持当今使用的大多数书写系统。它是US-ASCII (ANSI X3.4-1986)和Latin-1 (ISO 8859-1)的超集,所有US-ASCII/Latin-1字符在相同的代码位置可用。在幕后,QString使用隐式共享(写时复制)来减少内存使用并避免不必要的数据复制。这也有助于减少存储16位字符而不是8位字符的固有开销。
除了QString, Qt还提供了QByteArray类来存储原始字节和传统的以'\0'结尾的8位字符串。对于大多数目的,QString是您想要使用的类。它在整个Qt API中都被使用,并且Unicode支持可以确保您的应用程序易于翻译,如果您想在某个时候扩展应用程序的市场。QByteArray适用的两种主要情况是:需要存储原始二进制数据时,以及内存保护至关重要时(如在嵌入式系统中)。
QString初始化
常用API
// 构造一个空字符串对象
QString::QString();
// 将 char* 字符串 转换为 QString 类型
QString::QString(const char *str);
// 将 QByteArray 转换为 QString 类型
QString::QString(const QByteArray &ba);
//构造一个给定大小的字符串,每个字符都设置为ch。
QString::QString(qsizetype size, QChar ch)
例:
void Widget::init()
{
//直接赋值
QString string="helloworld";//直接赋值一个字符串给他
qDebug() << string; //打印输出helloworld
//调用拷贝构造函数
QString string2(string);
qDebug() << string2; //打印输出helloworld
//索引赋值
QString string3;
string3.resize(5);
char a[6]="hello";
for(int i=0;i<5;i++)
{
string3[i]=a[i];
}
//qDebug() << string3; //输出hello
//单字符串初始化
QString string4(static_cast<QChar>(0x08));
}
字符串拼接
void Widget::splicing()
{
QString string1="hello";
QString string2="world";
//使用重载的+号
QString string3=string1+string2;
//使用append函数
QString string4=string1.append(string2);
//使用asprintf函数
QString string5= QString::asprintf("%s,%s",string1.data(),string2.data());
//使用arg函数
QString string6=QString("%1%2").arg(string1).arg(string2);
//上述结果均输出helloworld
}
插入数据
常用API
// 插入数据, 将 str 插入到字符串第 position 个字符的位置(从0开始)
// 其他重载的同名函数可参考Qt帮助文档, 此处略
QString &QString::insert(int position, const QString &str);
QString &QString::insert(int position, const char *str);
QString &QString::insert(int position, const QByteArray &str);
void Widget::inserttest()
{
QString str = "helloworld";
//3.1.insert 字符串
str.insert(0,"123");
qDebug()<<str;
//3.2 insert 插入字符
str = "helloworld";
str.insert(1,'a');
qDebug()<<str;
/*输出为"123helloworld"
"haelloworld"*/
}