QString
QString
物件是Qt Framework中最通用的一個字串物件格式,QString
是由16位元的QChar組成,而每一個QChar
物件都對應一個Unicode 4.0
字元,然而Unicode的數值大於65536,因此若超過65536的數值,就會使用其他的處理方式,例如連續使用兩個QChar,不過在這張我們不會詳述這一部份,若想要進一步了解有關的資訊,請到官方文件:QString查看。
首先我們要先來看如何建構這QString
物件:
QString str1 ; // 建立一個空的物件。
QString str2("Hello World"); //送入一個字串,建立成`QString`物件
QByteArray array1("QByteArray");
QString str3(array1);
//因為QByteArray是由位元組為基本元素的陣列物件,因此也可以直接用來建構`QString`
QString str4(10,"H");
//建立一個大小為10個字元的字串,且將其中所有的字元初始值設為10
QString str5 = "HelloWorld!";
//因為QString可以直接接收const char*為建構子
還有其他建構子,可以直接進到Qt的官方中閱讀。
取得字串中的元素字元
其實在所有有牽扯到陣列的物件,例如前幾章的QBitArray
、QByteArray
或是vector物件等等,都可以透過[]運算子或是at()
函式去存取其中的值。在這裡要提醒一件事情,使用at()
函式會比使用運算子[]來的快速,且較容易掌握錯誤。
在這個範例中要計算字元A在字串中出現了幾次:
QString str1("alkhfalfasdalkasldaa;dasdlahlka");
int a = 0;
for(int i=0;i<str1.size();i++){
if(str1.at(i) == QChar('a')){
a++ ;
}
}
qDebug()<<a;
字串的串接
跟標準函式庫一樣,當我想要串接QString
物件時,我們會使用運算子+
、+=
來做串接,除此之外,QString
也提供了append()
以及prepend()
來串接字元。
QString str("Hello ");
QString str1("World!");
str.append(str1); // str == "Hello World!"
QString str2("funny!");
QString str3("C++ is very ");
str2.prepand(str3); // str2 == "C++ is very funny!"
此外,因為append()
以及prepend()
都會回傳連接後的QString&,因此我們也可以用賦值的方式得到此結果。
QString stringResult;
stringResult = str.append(str1);
可替換的字串
例如在寫登入歡迎詞時,我們會依照登入者的姓名等資訊去變化歡迎詞,我們可能會這樣寫:
// C++ 標準函式庫寫法。
std::string name("FloatFlower.Huang");
std::cout<<"Hello! "<<name<<". Welcome!";
在QString
物件中提供了一個函式arg()
,利用這個函式就可以輕易的達到這個目標:
QString name("FloatFlower.Huang");
QString email("[email protected]");
QString greet = QString("Hello! %1, Good Morning! Your email is %2.").arg(name).arg(email);
qDebug()<<great;
輸出:
Hello! FloatFlower.Huang, Good Morning! Your email is [email protected].
需要被替換的字串位置需要被標示為%1,%2,%3,...,%99並依照順序利用arg()
來引入需要的字串。
字串的字典序
有時候我們會需要將所有的字串做字典序排序,在QString中提供了compare
函式,來讓我們進行排行。若兩個排行相同,會回傳整數0,若前面比後u面的字串排行較前面,則會回傳大於0的數字,較小則回傳小於0的數字。
因為compare
是static member function可在外部直接使用QString::compare()
int result1 = QString::compare("Apple","apple",Qt::CaseInsensitive); // result1 == 0
int result2 = QString::compare("apple","Bird",Qt::CaseSensitive); // result2 < 0
int result3 = QString::compare("apple","Bird",Qt::CaseInsensitive); //result3 > 0
除了QString::compare()
之外,利用運算子>
、>=
、<
或是<=
來進行比較,而這個運算子會直接回傳布林值。