• QString介绍


    QString stores a string of 16-bit QChars, where each QChar corresponds one Unicode 4.0 character.

    一、初始化QString字符串

              1)Char * 初始化

      QString str = "Hello";

              QString converts the const char * data into Unicode using the fromAscii() function. 

              2)QChar[]数组初始化

    Cpp代码  收藏代码
    1. static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 };  
    2. QString str(data, 4);  

                也可以这样

    Cpp代码  收藏代码
    1. QRegExp pattern;  
    2. static const QChar unicode[] = { 0x005A, 0x007F, 0x00A4, 0x0060,  
    3. 0x1009, 0x0020, 0x0020};  
    4. int size = sizeof(unicode) / sizeof(QChar);  
    5. QString str = QString::fromRawData(unicode, size);  

     

                3)还可以通过risize()函数和每个QChar字符进行初始化

    Cpp代码  收藏代码
    1. QString str;  
    2. str.resize(4);  
    3.   
    4. str[0] = QChar('U');  
    5. str[1] = QChar('n');  
    6. str[2] = QChar(0x10e3);  
    7. str[3] = QChar(0x03a3);  

               通过at()函数进行每个字符读取

    Cpp代码  收藏代码
    1. QString str;  
    2.   
    3.  for (int i = 0; i < str.size(); ++i) {  
    4.      if (str.at(i) >= QChar('a') && str.at(i) <= QChar('f'))  
    5.          qDebug() << "Found character in range [a-f]";  
    6.  }  

    二、QString的操作函数  后续慢慢更新

    Cpp代码  收藏代码
    1. QString str = "and";  
    2.  str.prepend("rock ");     // str == "rock and"  
    3.  str.append(" roll");        // str == "rock and roll"  
    4.  str.replace(5, 3, "&");   // str == "rock & roll"  
    5.   
    6.  QString x = "free";  
    7.  QString y = "dom";  
    8.  x.append(y);           // x == "freedom"  
    9.  x.insert(x.size(), y);//x == "freedom"  
    10.   
    11.  QString str = "Meal";  
    12.  str.insert(1, QString("ontr"));  
    13.  // str == "Montreal"  
    14.   
    15.  QString s = "Montreal";  
    16.  s.remove(1, 4);     // s == "Meal"  移除1-4字符  
    17.   
    18.  QString str("LOGOUT ");  
    19.  str.chop(2);          // str == "LOGOUT" 从字符串后面移除2字符  
    20.   
    21.  QString str = "Vladivostok";  
    22.  str.truncate(4);     //  str == "Vlad" 到4截断字符  
    23.   
    24.  QString s = "Hello world";  
    25.  s.resize(5);         // s == "Hello"  
    26.  s.resize(8);        // s == "Hello???" (where ? stands for any character)  
    27.   
    28.  QString t = "Hello";  
    29.  t += QString(10, 'X');  
    30.  // t == "HelloXXXXXXXXXX"  
    31.   
    32. QString r = "Hello";  
    33.  r = r.leftJustified(10, ' ');  
    34.  // r == "Hello     "  
    35.   
    36.  QString x = "Pineapple";  
    37.  QString y = x.left(4);      // y == "Pine"  
    38.   
    39.  QString x = "Pineapple";  
    40.  QString y = x.right(5);      // y == "apple"  
    41.   
    42.  QString str = "Pineapple";  
    43.  str = str.rightJustified(5, '.'true);    // str == "Pinea"  
    44.   
    45.  QString str = "Bananas";  
    46.  str.endsWith("anas");         // returns true  
    47.  str.endsWith("pple");         // returns false  
    48.   
    49.  QString str = "Berlin";  
    50.  str.fill('z');  
    51.  // str == "zzzzzz"  
    52.   
    53.  str.fill('A', 2);  
    54.  // str == "AA"  
    55.   
    56.  QString x = "sticky question";  
    57.  QString y = "sti";  
    58.  x.indexOf(y);               // returns 0  
    59.  x.indexOf(y, 1);            // returns 10  
    60.  x.indexOf(y, 10);           // returns 10  
    61.  x.indexOf(y, 11);           // returns -1  
    62.   
    63.  QString x = "crazy azimuths";  
    64.  QString y = "az";  
    65.  x.lastIndexOf(y);           // returns 6  
    66.  x.lastIndexOf(y, 6);        // returns 6  
    67.  x.lastIndexOf(y, 5);        // returns 2  
    68.  x.lastIndexOf(y, 1);        // returns -1  
    69.   
    70.   
    71.  QString x = "Nine pineapples";  
    72.  QString y = x.mid(5, 4);            // y == "pine"  
    73.  QString z = x.mid(5);               // z == "pineapples"  
    74.   
    75.   
    76.  long a = 63;  
    77.  QString s = QString::number(a, 16);             // s == "3f"  
    78.  QString t = QString::number(a, 16).toUpper();     // t == "3F"  
    79.    
    80.  QString s = "Montreal";  
    81.  s.remove(1, 4);  
    82.  // s == "Meal"  
    83.   
    84.  QString t = "Ali Baba";  
    85.  t.remove(QChar('a'), Qt::CaseInsensitive);  
    86.  // t == "li Bb"  
    87.   
    88.  QString x = "Say yes!";  
    89.  QString y = "no";  
    90.  x.replace(4, 3, y);  
    91.  // x == "Say no!"  
    92.   
    93.  QString str = "colour behaviour flavour neighbour";  
    94.  str.replace(QString("ou"), QString("o"));  
    95.  // str == "color behavior flavor neighbor"  
    96.   
    97.  QString str;  
    98.  //! [51]  
    99.  QString csv = "forename,middlename,surname,phone";  
    100.  QString path = "/usr/local/bin/myapp"// First field is empty  
    101.  QString::SectionFlag flag = QString::SectionSkipEmpty;  
    102.   
    103.  str = csv.section(',', 2, 2);   // str == "surname"  
    104.  str = path.section('/', 3, 4);  // str == "bin/myapp"  
    105.  str = path.section('/', 3, 3, flag); // str == "myapp"  
    106.   
    107.  //字符串转换成整型  
    108.  QString str;  
    109.  str.setNum(1234);       // str == "1234"  
    110.  //字符串转成整型  
    111.  long a = 63;  
    112.  QString s = QString::number(a, 16);             // s == "3f"  
    113.  QString t = QString::number(a, 16).toUpper();     // t == "3F"  
    114.   
    115.  QString str = "a,,b,c";  
    116.  QStringList list1 = str.split(",");  
    117.  // list1: [ "a", "", "b", "c" ]  
    118.  QStringList list2 = str.split(",", QString::SkipEmptyParts);  
    119.  // list2: [ "a", "b", "c" ]  
    120.   
    121.   
    122. QString str = "  lots  of whitespace  ";  
    123.  str = str.trimmed();  
    124.  // str == "lots  of whitespace"  
    125.   
    126.  //判断字符串相等  
    127.  int x = QString::compare("aUtO""AuTo", Qt::CaseInsensitive);  // x == 0  
    128.  int y = QString::compare("auto""Car", Qt::CaseSensitive);     // y > 0  
    129.  int z = QString::compare("auto""Car", Qt::CaseInsensitive);   // z < 0  
    130.   
    131.   
    132. Qstring 转换char*问题!    
    133. 方法一:    
    134.  QString qstr("hello,word");    
    135.  const char * p = qstr.toLocal8Bit().data();    
    136.  方法二:    
    137.  const char *p = qstr.toStdString().data();    
    138.  //转换过来的是常量    
    139.   
    140.  方法三:    
    141.  QString str="abc";    
    142.  char *ch;    
    143.  QByteArray ba = str.toLatin1()    
    144.  ch = ba.data();    

     

    三、更有效的构造 String

         我们通常通过"+"连接多个子字符串,例如:

          QString foo;

         QString type = "long";

         foo->setText(QLatin1String("vector<") + type + QLatin1String(">::iterator"));

         if (foo.startsWith("(" + type + ") 0x"))

             ...

            这种构造写法,没有任何错误,但是有一些隐藏的效率问题。从Qt4.6之后,我们就可以消除这些问题。

    首先,多次使用"+"意味着多次进行内存分配。当你连接n个子字符串的时候,如果n>2,就会有n-1次内存分配。

    其次,QLatin1String 并不在内存中保存它的长度,而是当你需要知道它的长度时候,直接调用qstrlen()函数。

    在Qt4.6中,新建了一个内部模板类QStringBuilder ,它有一些可以帮助解决该问题的方法。这个类被当做内部的,并不出现在我们的帮助文档中,因为你的代码中并不会用到它。它的使用将会自动的,下面详细说一下。

    QStringBuilder  使用表达式模板重新解释'%'操作符,这样当你使用'%'代替'+'符号,连接字符串的时候,多次连接子字符串将被推迟,直到最后整个字符串被确定。这个时候,这个字符串的大小就是已知的了。这个时候内存分配器,就会一次性的分配这个已知大小的空间,然后把各个子字符串一个个拷贝进来。

    QLatin1Literal 是一个二级的内部类,它可以代替QLatin1String类。QLatin1String类因为兼容性的原因无法被改变。QLatin1Literal 存储了它的长度,因此当QStringBuilder 计算最后的字符串的大小时,可以节省时间。

    另外还通过内联潜入和减少引用次数(通过QStringBuilder 创立的QString,引用数是1,而QString::append()需要额外的测试)提高效率。

    有三种方式,可以使用这种改善string构造效率的方法。

    直接方式就是包含QStringBuilder ,当你在任何地方用到它的时候。然后当连接字符串的时候,用'%'代替'+'。

            #include <QStringBuilder>

            QString hello("hello");

            QStringRef el(&hello, 2, 3);

            QLatin1String world("world");

            QString message =  hello % el % world % QChar('!');

    另外一种:全局的方式,定义一个宏定义。然后用用'%'代替'+'

            //使用快速连接

            #define QT_USE_FAST_CONCATENATION

    and use '%' instead of '+' for string concatenation everywhere.

    第三种方式:最方便,但是并不是所有代码都会兼容。就是包含两个宏定义即可。

        #define QT_USE_FAST_CONCATENATION

         #define QT_USE_FAST_OPERATOR_PLUS

    然后所有的'+'就会被当做QStringBuilder 的'%'执行。

    但在Qt 4.8、5.0,这个宏已被新的QT_USE_QSTRINGBUILDER宏所替代。(只需要这一个宏,就可以自动把'+'当做'%'执行)

  • 相关阅读:
    idea 出现 java.noSuchMechodFound
    IDEA maven 多项目 出现 java 程序包找不到
    Nginx中间件使用心得(一)
    IntelliJ IDEA 2017版 编译器使用学习笔记(三) (图文详尽版);IDE快捷键使用
    IntelliJ IDEA 2017版 编译器使用学习笔记(二) (图文详尽版);IDE快捷键使用
    IntelliJ IDEA 2017版 编译器使用学习笔记(一) (图文详尽版);IDE快捷键使用;IDE多行代码同时编写
    IntelliJ IDEA 2017版 导入项目项目名称为红色
    IntelliJ IDEA 2017版 spring-boot与Mybatis简单整合
    IntelliJ IDEA 2017版 spring-boot加载jsp配置详解(详细图文实例)
    IntelliJ IDEA 2017版 spring-boot修改端口号配置把端口号改为8081
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/3758017.html
Copyright © 2020-2023  润新知