在C++中有兩種字串的表現方式,一種是 C 風格的字串,也就是最後以''\0結尾的字元陣列,另一種是 string 型態 的字串。
在Qt中,提供QString作為字串的表現形式,使用16位元Unicode來表現QString中的字元,可以在字串中包括'\0'字元,建立QString實例並賦予初值:
QString str = "caterpillar";
cout << str.length() << endl;
cout << str.length() << endl;
在Qt中會自動把"caterpillar"包裝為QString實例,length()方法可以傳回字串的字元長度,以上例 來說,將會傳回"caterpillar"的長度為11,如果要QString轉為字元陣列,也就是char *的形式傳回,則要使用toAscii()或toLatin1()方法傳回QByteArray,QByteArray包括位元陣列,您可以data() 方法傳回char *或使用constData()傳回const char*,例如:
cout << str.toAscii().data() << endl;
由QByteArray的data()或constData()傳回的char*是QByteArray所擁有,QByteArray使用完畢後,會負責 char*的記憶體回收。Qt提供一個巨集函式qPrintable(),可以讓您直接執行toAscii().constData(),例如:
cout << qPrintable(str) << endl;
您也可以使用QString的toStdString(),這會傳回<iostream>的std::string。
QString可以使用append()來附加字串,也可以直接使用+、+=運算子來串接""包括的字串,或是QString的實例,例如:
QString str = "1234";
cout << &str << endl;
str += str;
cout << qPrintable(str) << endl;
str = str + "5678";
cout << qPrintable(str) << endl;
cout << &str << endl;
str += str;
cout << qPrintable(str) << endl;
str = str + "5678";
cout << qPrintable(str) << endl;
您可以使用QString的at()方法來傳回每個字元的QChar物件,也可以直接使用[]運算子,使用toAscii()或toLatin1()可以取得char,例如:
QString str = "ABCD";
for(int i = 0; i <str.length(); i++) {
cout << str.at(i).toAscii() << endl;
}
for(int i = 0; i <str.length(); i++) {
cout << str[i].toAscii() << endl;
}
for(int i = 0; i <str.length(); i++) {
cout << str.at(i).toAscii() << endl;
}
for(int i = 0; i <str.length(); i++) {
cout << str[i].toAscii() << endl;
}
可以使用=指定運算子來複製字串:
QString str1 = "1234";
QString str2 = str1;
QString str2 = str1;
您可以直接使用==、!=來比較兩個QString的字元內容是否相同,大小寫是有區分的,或是使用>、>=、<、<=等比較運算,例如:
QString str1 = "ABC";
QString str2 = "ABC";
cout << (str1 == str2) << endl;
cout << (str1 != str2) << endl;
cout << (str1 > str2) << endl;
cout << (str1 < str2) << endl;
QString str2 = "ABC";
cout << (str1 == str2) << endl;
cout << (str1 != str2) << endl;
cout << (str1 > str2) << endl;
cout << (str1 < str2) << endl;
QString有類似C語言printf()函式的sprintf(),可用於格式化字串,例如以下將顯示"caterpillar:1975-5-26":
QString str;
str.sprintf("%s:%d-%d-%d", "caterpillar", 1975, 5, 26);
cout << qPrintable(str) << endl;
str.sprintf("%s:%d-%d-%d", "caterpillar", 1975, 5, 26);
cout << qPrintable(str) << endl;
另一個更簡單的方式是使用佔位字元配合arg()方法,不用特別指定格式指定字,例如以下的顯示結果與上面是相同的:
QString str =
QString("%1:%2-%3-%4").arg("caterpillar").arg(1975).arg(5).arg(26);
cout << qPrintable(str) << endl;
QString("%1:%2-%3-%4").arg("caterpillar").arg(1975).arg(5).arg(26);
cout << qPrintable(str) << endl;
要將數值轉為QString實例,可以使用靜態的number()方法或是使用物件的setNum()方法,例如:
QString str2 = QString::number(100);
要將字串轉為數值,可以使用QString的toInt()、toDouble()等方法,如果無法順利轉換,將傳回0,例如:
QString str = "1975";
int number = str.toInt();
int number = str.toInt();
QString本身還擁有許多的方法可供操作,像是toUpper()可將字元轉為大寫,toLower()可將字元轉為小寫,replace()方法可 指定置換子字串,split()方法可以進行字串分割並傳回QStringList,當中包括切割過後的各個QString物件,startsWith ()測試字串是否以某個子字串作為開頭,endWith()測試字串是否以某個子字串作為結束。
關於QString上各種可用的方法,可以直接參考Qt的線上文件有關於QString的說明。