Learning QString!!!
先记录几个注意点:
1、编码的区别;在qt中QString类使用的是unicode编码格式,这是一个short 类型,一个字符占两个字节;普通的const char *类型的字符,使用utf-8编码格式,这是使用一个字节编码,以’\0’结束
2、QString 使用implicit sharing(隐式共享),也就是说copy-on-write(写时拷贝),这样减少了存储器的使用,对于以两个字节存储的unicode来说节省了硬开销。
3、Qt提供了一个8位存储以’\0’结束的类型QByteArray
4、在访问一个QString类型的时候,使用at(index),要比operator[]()好,因为后者是deep copy
5、两种办法从QString到const char *的转换;使用宏qPrintable(QString);<QString>.toLocal8Bit().constData();打印带参数的类似于printf功能,使用qWarning("%s:%s", qPrintable(key), qPrintable(value));
6、从一个QString类型的字符串中提取一部分字符串的方法:left(),right(),mid()
7、可以使用fill(QChar ch,int size=-1)来填充一个已经存在的QString
8、可以替换QString中的字符用replace(),移除用remove(),寻找字串或者出现的次数用indexOf(),lastIndexOf()
9、如果想要像C一样实现格式化字符串比如printf(),可以使用arg()这个方法,比如QString s = “hello %1”; s.arg(QString(“10”));这样打印就是hello 10,qt提供了很多重载,关于这个函数,见参考文档
10、 其他可以写数字用setNum(),写有格式比如十六进制的用number()
11、 同样也有容器来装QString类型,像C中的字符串数组一样,QStringList,这时候你就可以使用split()分割字符串到这个容器里面
12、 可以取得QStringList的字串,通过特定的QRegEx正则式用QStringList::filter()
13、 由于历史原因,qt中的isNull()和isEmpty()是不一样的,举个例子:QString().isNull()返回true,QString().isEmpty()返回true;QString(“”).isNull()返回false,而QString(“”).isEmpty()返回true,是Null就一定是Empty,而是Empty就不一定是Null了