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的官方中閱讀。

取得字串中的元素字元

其實在所有有牽扯到陣列的物件,例如前幾章的QBitArrayQByteArray或是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()之外,利用運算子>>=<或是<=來進行比較,而這個運算子會直接回傳布林值。

results matching ""

    No results matching ""