QString

与C++的string以及MFC中的CString类似的,在QT5中使用的字符串类。

QString类的构造:可以默认为空,或者使用C风格字符串等进行构造,或者复制构造。

QString可以使用+=在尾部添加字符串。

QString可以使用“sprintf”来进行格式化输出,比如:

QString str;

str.sprintf("%s", "welcome!");

QString可以使用simplified()函数来去除字符串里面多余的空格,只保留一个空格。

QString可以使用startWith()、endsWith()来判断以什么开始、什么结束。

QString默认是大小写敏感的,也就是QT::CaseSensitive的。

QString的contains()是查找指定字符串是否存在,

QString的toInt()、toFloat()、toAscii()、toUtf8()、来转为对应的数据。

NULL字符串和空字符串QString是不一样的。

默认QString构造后,就是一个NULL字符串。

NULL字符串一定是空字符串,但是空字符串不一定就是NULL字符串。

比如QString str,这是一个空字符串,也是一个NULL字符串。

比如QString str(""),这是一个空字符串,但是不是NULL字符串。


QString的好处是不需要程序员手动管理内存,那么系统是如何对QString进行内存管理的呢?分以下三步走:

PS:QString存储的是Unicode16编码,所以1个字符=2字节

1、在小于20字符空间之前,步进为4字符。

2、在20-4084字符之间,每次分配内存块大小以2的倍数增加。

3、从4084字符开始,每次以2048字符步进增加。


还需要注意的是,QString是支持隐式共享的,也就是非必要情况下执行浅拷贝,必要情况下执行深拷贝。

比如如下这段代码:

QString str1 = "a";

QString str2 = str1;  //执行浅拷贝,str2和str1指向同一块内存,引用数= 2

str2[0] = 'b'; //执行深拷贝,str2指向一块新的内存区域,新的str2引用数 = 1, 而str1那边的引用数=2-1= 1

str2[0] = 'c'; //执行浅拷贝,

除了 QString是支持隐式共享的,还有其他的也支持:

1、QT的容器类,比如QList、QMap等。

2、QPen、QVariant、QBrush、QFont等。

你可能感兴趣的:(QString)