QString存储了一串QChar,而QChar提供了一个16位的unicode4.0字符。在后台,QString使用隐士共享implicit sharing来减少内存使用和避免不必要的数据复制,这也有助于减少存储16位字符的固有开销。
编辑操作,查询,转换
#include <QCoreApplication>
#include <QList>
#include <QDebug>
#include <QMap>
#include <QMultiMap>
#include <QStringList>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//编辑操作
QString str = "Hello";
qDebug()<<QObject::tr("the sizeof str:")<<str.size();//大小为5
qDebug()<<str[0]; //获取第一个字符
str[0] = 'h'; //修改第一个字符
str.append(" Qt"); //向字符串后添加"Qt"
str.replace(1,4,"i"); //将第一个字符开始的后面4个字符替换为字符串"i"
str.insert(2,"my"); //在第二个字符位置插入"my"
str += "!!!"; //连接两个字符串
str = " hello world ";
//去除空格
QString str1 = str.trimmed();//除去字符串两端的空白字符
qDebug()<<str1;
str1 = str.simplified();//除去字符串两端和中间多余的空白字符
qDebug()<<str1;
str1 = str.replace(" ","");//除去所有空白字符
qDebug()<<str1;
str = "hi,my,,Qt";
//从字符串中获取字符串数组,用逗号分开
QStringList list1 = str.split(",",QString::SkipEmptyParts);//跳过空的
QStringList list2 = str.split(",");//不跳过空的
str1 = list1.join(" ");//将各个子字符串组合成一个字符串,中间用" "隔开
QString str2 = list2.join("");
qDebug()<<QString().isNull();//结果为true
qDebug()<<QString().isEmpty();//结果为true
qDebug()<<QString("").isNull();//结果为false
qDebug()<<QString("").isEmpty();//结果为true
//查询操作
str = "yafeilinux";
str1 = str.left(5);//取左边五个字符,yafei
str2 = str.right(5);//取右边五个字符,linux
str1 = str.mid(2,3);//从第二个字符开始取三个字符,fei
int index = str.indexOf("fei");//获取fei的位置,结果为2
index = str.indexOf("df");//获取df的位置,结果为-1
int count = str.count('i');//统计i的个数,结果为2
bool b1 = str.startsWith("ya");//是否以ya开始
bool b2 = str.endsWith("linux");//是否以linux结束
bool b3 = str.contains("il");//是否包含il
str1 = "abcd";
bool b4 = str1>str;//str1是否大于str
//转换操作
str = "100";
int num = str.toInt(); //QString转int
num += 100;
str = QString::number(num);//int转QString
str = "FF";
bool ok;
int hex = str.toInt(&ok, 16);//ok=true,hex=255
num = 26;
str=QString::number(num,16);//str=la
str = "123.456";
float f=str.toFloat();
str = "abc";
str = str.toUpper();//结果为ABC
str1 = str.toLower();//结果为abc
num = 26;
str1 = "liuzc";
str = QString("name is %1,age is %2").arg(str1).arg(num);//格式化字符串,结果为name is liuzc,age is 26
str ="%1 %2";
str1 = str.arg("% 1f","hello");//结果为% 1f hello
str2 = str.arg("% 1f").arg("hello");//结果为% 1f hello
str = QString("ni%1").arg("hi",5,'*');//设置字段宽,使用*填充ni***hi
qreal value = 123.456;
str = QString("num:%1").arg(value,0,'f',2);//结果str为num:123.46,四舍五入了?
qDebug()<<str;
qDebug()<<qPrintable(str);//不会显示引号
return a.exec();
}