1. 程式人生 > >Qt開發(一) QString類的使用

Qt開發(一) QString類的使用

1. QString概述
開發中,字串是必不可少的。C++ 中提供兩種字串:傳統的 C 語言型以 “\0” 結尾的字元陣列和 std::string 類。而在 Qt 開發中,我們更多的是使用Qt專有的 QString 類,相似於 C++ 中的 std::string類,但是又有不同,因為 QString 支援 16位的 Unicode值。開發中使用 QString 時,不用刻意去擔心 如何分配足夠的記憶體空間 或是 確保資料以 “\0” 結尾的問題。這些 QString 都默默為我們搞定了,而且可以嵌入 “\0”字元。length() 函式會返回包括被嵌入的 “\0” 字元的整個字串的大小。

2. QString 中常用的成員函式


(1) QString 操作符 + 和 += (連線兩個字串 和 追加字串)
注意: 需 #include 標頭檔案 QString

QString str1 = "Password:";
QString userPassword = "HIKVISION";
str1 += userPassword;
qDebug()<<"str1: "<<str1;

列印結果: str1:  "Password:HIKVISION"

(2) QString::append() 字串追加函式
append 函式和 += 操作符功能相同

  QString str2 = "User:"
; QString userName = "lixiaogang5"; str2.append(userName); qDebug()<<str2; 列印結果:"User:lixiaogang5"

(3) QString::sprintf() 字串連線函式
備註:QString::sprintf()函式支援與C/C++庫中的sprintf 函式相同的格式說明符。

 QString str3 =NULL;
 str3.sprintf("%s %s","Password:","HIKVISION");
 qDebug()<<str3;
列印結果:"Password: HIKVISION"

(4) QString::arg() 函式
該函式用來從其他 字串或 陣列 來建立一個字串。

QString str4 = nullptr;
str4 = QString("%1 %2 %3 %4 (%5s-%6s)").arg("Time").arg("accuracy") \
.arg("range").arg("in").arg(1375).arg(1395);
qDebug()<<str4;

列印結果:
"Time accuracy range in (1375s-1395s)"

(5) QString::number() 函式 將數字轉換為字串

函式原型為:
QString QString::number(double n, char format = 'g', int precision = 6) [static]

功能: 根據指定格式 format 和 精度 precision 返回 n 的字串形式。其中format可取值如下:

Format  Meaning
e   format as [-]9.9e[+|-]999
E   format as [-]9.9E[+|-]999
f   format as [-]9.9
g   use e or f format, whichever is the most concise
G   use E or f format, whichever is the most concise
 QString str5 = nullptr;
 str5 = QString::number(100.011,'g',6);
 qDebug()<<"str5:"<<str5;
列印結果:str5: "100.011"

注意: QString::setNum() 也能實現 number 的效果

 QString str5 = nullptr;
 str5.setNum(100.011,'g',6);
 qDebug()<<str5;
列印結果:  "100.011"

(6) QString::toInt() 、toLongLong()、toDouble() 等函式 將 字串 轉換為 數字
注意:這些函式接收一個任選的bool 變數的指標,並且根據 轉換成功與否 來將 變數值 設為 true 或false。若轉換成功,設為true(1),反之為false(0);

int hex = 0;
QString str6 = "10086";
bool flagOkorFalse;
hex = str6.toInt(&flagOkorFalse,16);
if( true == flagOkorFalse)
{
    qDebug()<<"Conversion success";
}
else
{
   qDebug()<<"Conversion failured.";
}
qDebug()<<hex;

列印結果:
Conversion success
65670

(7) QString::min() 從字串中根據提取出 對應部分 字串

 QString str6 = "See farther, go farther";
 qDebug()<<str6.mid(13,2);

列印結果: "go"

min 函式的原型如下:

QString QString::mid(int position, int n = -1) const
//常量成員函式

min函式有2個引數,第二個引數預設為-1;若第二個引數採用預設,則 min()函式返回在 給定位置開始到字串末端結束的字串。

QString str6 = "See farther, go farther";
qDebug()<<str6.mid(13);

列印結果: "go farther"

(8) QString::left()、QString::right() 返回字串的左邊n個字串、右邊n個字串

QString str7 = "See farther, go farther";
qDebug()<<str7.left(12)<<" "<<str7.right(10);
//其中引數1210表示返回的字元個數,而不是下標

列印結果: "See farther,"   "go farther"

(8) QString::indexOf() 查明一個字串是否包含一個特定的字元、字串或正則表示式

 QString str7 = "See farther, go farther";
 int index = str7.indexOf("farther");
 if(-1 == index)
    qDebug()<<"To find the failure";
 else qDebug()<<index;
列印結果:4

成功則返回對應字串的起始位置下標;失敗則返回 -1.

(9) QString::startsWith() 和 QString::endsWith() 檢查字串是否以某個字元(串)開始或結束

 QString str7 = "See farther, go farther";
    if(str7.startsWith("See") && str7.endsWith("farther"))
    {
        qDebug()<<"TO DO...";
    }else{
        qDebug()<<"Not";
    }
列印結果:TO DO...

注: 利用 left 和 right 也能實現同樣的效果,但是使用 startsWith 和 endsWith 更加簡單和快捷。

    QString str7 = "See farther, go farther";
    if(str7.left(3) == "See" && str7.right(7) == "farther")
    {
        qDebug()<<"TO DO...";
    }else{
        qDebug()<<"Not";
    }

列印結果:TO DO...

(10) == (比較操作符)和 toUpper()、toLower()
== 操作符比較字串時是區分大小的。如下:

    QString str8 = "user:";
    QString str9 = "User:";
    if(str8 > str9)
        qDebug()<<"greator";
    else
        qDebug()<<"less";

列印結果: greator //因為u的ASCII碼 > U的ASCII碼

若想比較兩個字串的大小,而且比較並不關係大小寫,toLower 和 toUpper 是一個不錯的選擇。

    QString str8 = "user:";
    QString str9 = "User:";
    if(str8.toUpper() == str9.toUpper())
        qDebug()<<"equal";
    else
        qDebug()<<"not equal";

列印結果:equal

(11) QString::replace() 使用一個字串來代替另一個字串中的一部分

    QString str10 = "Happy day";
    qDebug()<<str10.replace(1,4,"APPY");
列印結果:"HAPPY day"

可以使用 remove 和 insert 組合來達到 replace 的效果。

   QString str10 = "Happy day";
   str10.remove(1,4);
   str10.insert(1,"APPY");
   qDebug()<<str10;
列印結果: "HAPPY day"

(12) QString::trimmed() 刪除字串兩端的空白處 的空格(包括 空格符、製表符、換行符等)

    QString str11 = "  Just \n do  \nit. \n"; 
    //**Just*\n*do**\nit.*\n (*號代表空格)
    /*======= trimmed之後 ===============*/
    //Just*\n*do**\nit.
    qDebug()<<str11.trimmed();
列印結果:
"Just 
 do  
it."

(13) QString::simplified() 用簡單的空格符代替字串內部每一連續空白處的空格

    QString str11 = "Just \n do  \nit.";
    qDebug()<<str11.trimmed();

列印結果:
"Just 
 do  
it."

(14) QString::split() 把字串分解成一些QStringList字串

1:
    QString str12 = "Hangzhou welcomes you";
    QStringList stringList = str12.split(" ");
    QStringList::const_iterator conIt =  stringList.constBegin();
    for (; conIt != stringList.constEnd(); ++conIt)
       qDebug() << (*conIt).toLocal8Bit().constData() ;

列印結果:
Hangzhou
welcomes
you

把str12 以空格的形式分成了 Hangzhou welcomes you 3個子串。

    QString str12 = "Hangzhou,Shanghai,GuiYang";
    QStringList stringList = str12.split(",");
    QStringList::const_iterator conIt =  stringList.constBegin();
    for (; conIt != stringList.constEnd(); ++conIt)
       qDebug() << (*conIt).toLocal8Bit().constData() ;

列印結果:
Hangzhou
Shanghai
GuiYang

把str12 以逗號的形式分成了 Hangzhou Shanghai GuiYang3個子串。

(15) QString::empty() 和 QString::length() 判斷字串是否為空 和 返回字串長度

    QString str12 = "Hangzhou,Shanghai,GuiYang";
    if(true == str12.isEmpty() || 0 == str12.length())
        qDebug()<<"EMPTY";
    else
        qDebug()<<str12.length();


列印結果:25

(16) QString::join() 將QStringList中的項連線起來形成一個單一的字串。

    QString str12 = "Hangzhou,Shanghai,GuiYang";
    QStringList stringList = str12.split(",");
        stringList.sort();  //按字母表順序排序
    QString tmpStr = stringList.join(" ");
    qDebug()<<tmpStr;


列印結果:"GuiYang Hangzhou Shanghai"

(17) QString::toAscii() 和 QString::toLatin1() 顯示的將QString轉換為 const char *型別字串

    QString str12 = "Hangzhou,Shanghai,GuiYang";
    printf("str12[%s]\n",str12.toLatin1().data());
列印結果:str12[Hangzhou,Shanghai,GuiYang]

(17) QString::fromLocal8bit() 和 QString::fromUtf8() 、 QString::fromUtf16() 顯示的將const char *轉換為 QString字串

    const char *ch = "hello";
    QString tempStr = QString::fromUtf8(ch);
    qDebug()<<tempStr;

列印結果:"hello"