1. 程式人生 > >QT中QString 類的使用--獲取指定字元位置、擷取子字串等

QT中QString 類的使用--獲取指定字元位置、擷取子字串等

QString 類中各函式的作用。

一、字串連線函式。
1、QString也過載的+和+=運算子。這兩個運算子可以把兩個字串連線到一起。
    
2、QString的append()函式則提供了類似的操作,例如:

   str = "User: ";  
   str.append(userName);  
   str.append("\n");


二、獲取字串某位置的值。

//

QString中有沒有函式能截取出兩個指定位置之間的字串?


    QString x = "Nine pineapples";  
    QString y = x.mid(5, 4);            // y == "pine"  
    QString z = x.mid(5);               // z == "pineapples"

1、mid()函式接受兩個引數,第一個是起始位置,第二個是取串的長度。如果省略第二個引數,則會從起始位置擷取到末尾。正如上面的例子顯示的那樣

2、函式left()和rigt()類似,都接受一個int型別的引數n,都是對字串進行擷取。不同之處在於,left()函式從左側擷取n個字元,而right()從右側開始擷取。下面是left()的例子:

   1. QString x = "Pineapple";  
   2. QString y = x.left(4);      // y == "Pine"

三、獲取字元在字元中的位置。
     indexOf()
   //存在lastIndexOf()函式,返回字串的最後一次出現的索引?  
   QString x = "sticky question";  
   QString y = "sti";  
   x.indexOf(y);               // returns 0  
   x.indexOf(y, 1);            // returns 10  
   x.indexOf(y, 10);           // returns 10  
   x.indexOf(y, 11);           // returns -1

四、可以檢測字串是不是以某個特定的串開始或結尾。
    startsWith()    endsWith()
    
    
    if (url.startsWith("http:") && url.endsWith(".png"))  
         {  }

    這段程式碼等價於

   if (url.left(5) == "http:" && url.right(4) == ".png") 
         {  }

五、

     字串替換函式replace();
     trimmed()函式去除字串兩側的空白字元(注意,空白字元包括空格、Tab以及換行符,而不僅僅是空格);
     toLower()和toUpper()函式會將字串轉換成小寫大寫字串;
     remove()和 insert()函式提供了刪除和插入字串的能力;
     simplified()函式可以將串中的所有連續的空白字元替換成一個,並且把兩端的空白字元去除,例如"   \t   ”會返回一個空格" "。

六、const char *型別的C風格字串與QString字元之間的轉換。

     簡單來說,QString的+=即可完成這個功能:
     str += " (1870)";

     這裡,我們將const char * 型別的字串" (1870)"轉換成為QString型別。
     如果需要顯式的轉換,可以使用QString的強制轉換操作,或者是使用函式fromAscii()等。
     為了將QString型別轉成const char *字串,需要進行兩步操作,一是使用toAscii()獲得一個QByteArray型別物件,
     然後呼叫它的data()或者constData()函式,
     例如:

     printf("User: %s\n", str.toAscii().data());

     為了方便使用,Qt提供了一個巨集qPrintable(),這個巨集等價於toAscii().constData(),例如:

      printf("User: %s\n", qPrintable(str)); 
      
      我們呼叫QByteArray類上面的data()或者constData()函式,將獲得QByteArray 內部的一個const char*型別的字串,
      因此,我們不需要擔心記憶體洩漏等的問題,Qt會替我們管理好記憶體。不過這也暗示我們,注意不要使用這個指標太長時間,
      因為如果 QByteArray被delete,那麼這個指標也就成為野指標了。如果這個QByteArray物件沒有被放在一個變數中,
      那麼當語句結束後,QbyteArray物件就會被delete,這個指標也就被delete 了。

七、字串與其它型別的轉換函式。
     toInt()     轉整型
     toDouble()  轉雙精度型
     toLong()    轉長整型
     這些函式都接受一個bool指標作為引數,函式結束之後將根據是否轉換成功設定為true或者false:

     bool ok;  
     double d = str.toDouble(&ok);  
     if(ok)   
     {  
         // do something...  
     } else {  
          // do something...  
     }


     整型轉字串型:
         1、使用static的函式number()可以把數字轉換成字串。例如:
             QString str = QString::number(54.3); 
         2、 也可以使用非static函式setNum()來實現相同的目的:
              QString str;  
              str.setNum(54.3);

八、QString則提供了一個sprintf()函式實現了與C語言中的printf函式相同的功能。
    
    1. str.sprintf("%s %.1f%%", "perfect competition", 100.0); 
       這句程式碼將輸出:perfect competition 100.0%
       
    2、另一種格式化字串輸出的函式arg():
 
        str = QString("%1 %2 (%3s-%4s)").arg("permissive").arg("society").arg(1950).arg(1970);

{

<span style="background-color:rgb(255,255,0)"><span class="typ" style="color:#000000;">QString</span><span class="pln" style="color:#000000;"> str</span><span class="pun" style="color:#66660;">;</span><span class="pln" style="color:#000000;">
str </span><span class="pun" style="color:#66660;">=</span><span class="str" style="color:#00ff;">"%1 %2"</span><span class="pun" style="color:#66660;">;</span></span><span class="pln" style="color:#000000;background-color:rgb(250,250,250);">
str</span><span class="pun" style="color:#66660;background-color:rgb(250,250,250);">.</span><span class="pln" style="color:#000000;background-color:rgb(250,250,250);">arg</span><span class="pun" style="color:#66660;background-color:rgb(250,250,250);">(</span><span class="str" style="color:#00ff;background-color:rgb(250,250,250);">"%1f"</span><span class="pun" style="color:#66660;background-color:rgb(250,250,250);">,</span><span class="str" style="color:#00ff;background-color:rgb(250,250,250);">"Hello"</span><span class="pun" style="color:#66660;background-color:rgb(250,250,250);">);</span><span class="pln" style="color:#000000;background-color:rgb(250,250,250);">       </span><span class="com" style="color:#0820;background-color:rgb(250,250,250);">// returns "%1f Hello"</span><span class="pln" style="color:#000000;background-color:rgb(250,250,250);">
str</span><span class="pun" style="color:#66660;background-color:rgb(250,250,250);">.</span><span class="pln" style="color:#000000;background-color:rgb(250,250,250);">arg</span><span class="pun" style="color:#66660;background-color:rgb(250,250,250);">(</span><span class="str" style="color:#00ff;background-color:rgb(250,250,250);">"%1f"</span><span class="pun" style="color:#66660;background-color:rgb(250,250,250);">).</span><span class="pln" style="color:#000000;background-color:rgb(250,250,250);">arg</span><span class="pun" style="color:#66660;background-color:rgb(250,250,250);">(</span><span class="str" style="color:#00ff;background-color:rgb(250,250,250);">"Hello"</span><span class="pun" style="color:#66660;background-color:rgb(250,250,250);">);</span><span class="pln" style="color:#000000;background-color:rgb(250,250,250);">   </span><span class="com" style="color:#0820;background-color:rgb(250,250,250);">// returns "Hellof %2"</span>

}

      這段程式碼中,%1, %2, %3, %4作為佔位符,將被後面的arg()函式中的內容依次替換,比如%1將被替換成permissive,
      %2將被替換成society,%3將被替換成 1950,%4將被替換曾1970,最後,
      這句程式碼輸出為:permissive society (1950s-1970s). arg()函式比起sprintf()來是型別安全的,
      同時它也接受多種的資料型別作為引數,因此建議使用arg()函式而不是傳統的 sprintf()。

九、求字串的長度,返回值為INT型。
     length();

十、如何正確顯示中文字元

如果使QT根據Locale的環境變數取得字符集,可以使用如下命令:
QString::fromLocal8Bit("你好,世界!");

使用QString的fromLocal8Bit()函式;


QString str;


str = str.fromLocal8Bit("哈哈哈");