与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等。
网友评论