QString

作者: shyoskyo | 来源:发表于2019-11-12 10:53 被阅读0次

    与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

          本文链接:https://www.haomeiwen.com/subject/nuufictx.html