當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀] 一、前言  “合抱之木,生于毫末;九層之臺,起于壘土;千里之行,始于足下”,上一章我們知道了如何使用Qt創(chuàng)建簡單的示例程序,了解了最基本的Qt框架,在進一步

 一、前言  “合抱之木,生于毫末;九層之臺,起于壘土;千里之行,始于足下”,上一章我們知道了如何使用Qt創(chuàng)建簡單的示例程序,了解了最基本的Qt框架,在進一步學習Qt框架和消息機制前,我們應該對Qt本身有一個更細致的了解,這個了解就是Qt的模板庫、工具類和控件。

回到頂部(go to top)

二、Qt的模板庫、工具類和控件2.1 字符串類1、字符串的操作  我們了解字符串的操作就是要了解字符串主要有哪些操作符,Qt基于C++繼承和強化了string的功能,結構類型為QString,QString提供了一個二元的“+”和“+=”操作符,其中“+=”操作符功能和append函數(shù)方法具有同樣的功能,是現(xiàn)在一個字符串末尾追加另一個字符串,學習時可基于C++中String類進行比較。

1 QString str1="nihao";

2 QString str2="Qt";

3

4 str1+=str2; //str1="nihaoQt"

5 str1=str1+str2; //str1="nihaoQtQt"

6 str1.append(str2); //str1="nihaoQtQtQt"

7 str1.append("yes"); //str1="nihaoQtQtQtyes"

 Qt組合字符串的另一個函數(shù)楇 QString::sprintf(),此函數(shù)支持的格式定義符和C++庫中的函數(shù)sprintf定義的一樣。Qt還提供了另外一種方便的字符串組合方式,使用QString::arg()函數(shù),此函數(shù)的重載可以處理多種數(shù)據(jù)類型,一些重載具有額外的參數(shù)對字段的寬度、數(shù)字基數(shù)或者浮點數(shù)精度進行控制。相對于sprintf來說,srg是一個比較好的解決方案,因為它類型安全,完全支持Unicode,并且允許改變"%n"參數(shù)的順序。

1 QString str;

2 str=QString("%1 was born in %2 .").arg("Rimond").arg(1990);

3 //str="Rimond was born in 1990".

此外,QString也提供了一些其他組合字符串的方法

函數(shù)名稱函數(shù)功能

insert()在原字符串特定的位置插入另一個字符串

prepend()在原字符串的開頭插入另一個字符串

replace()用指定的字符串代替原字符串中的某些字符

為了解決特定場景比如去除一個字符串兩端的空白(空白字符包括回車字符“n”,換行字符“r”,制表符“t”和空格字符等),QString提供了特定的函數(shù)。

函數(shù)名稱函數(shù)功能

trimmed() 移出字符串兩端的空白字符

simplified()移除字符串兩端的空白字符,使用單個空格字符“ ”代替字符串中出現(xiàn)的空白字符

1 QString str=" Hello t QT n ! ";

2 str=str.trimmed();

3

4 //str=" Hello t to n you! "

5 //如果使用str=str.simplified(),str的結果是“Hello Qt !”

2、查詢字符串數(shù)據(jù)  查詢字符串數(shù)據(jù)有多種樣式。

(1) QString::startsWith()判斷一個字符串是否以某個字符串開頭。此函數(shù)具有兩個參數(shù),第一個參數(shù)指定了一個字符串,第二個參數(shù)指定是否大小寫敏感(默認大小寫敏感)。

1 QString str="Hello Qt!";

2 str.startsWith("Hello",Qt::CaseSensitive); //返回真

3 str.startsWith("Qt",Qt::caseSenstive); //返回假

(2) QString::endwith()類似于QString::startswith(),它用來判斷一個字符串是否以某個字符串結尾。

(3) QString::contains()判斷一個指定的字符串是否出現(xiàn)過。

1 QString str ="Hello QT!";

2 str.contains("QT",Qt::CaseSensitive); //返回真

(4) QString類還重載了多種用于比較的操作符,用法可參照C++ string類中重載的比較操作符。此外,QString類增加了兩個特殊函數(shù)。

localeAwareCompare(const QString&,const QString&):靜態(tài)函數(shù),比較前后兩個字符串,如果前面字符串小于后面字符串,則返回值為負整數(shù);如果等于則返回0;如果大于則返回值為正整數(shù),該函數(shù)用于比較基于本地字符集,而且楇平臺相關的,通常該函數(shù)用于向用戶顯示一個有序的字符串列表。

compare(const QString&,const QString&::CaseSensitivity):該函數(shù)可以指定是否進行大小寫的比較,而大小寫的比較楇完全基于字符的Unicode編碼值的,而且是非常快的,返回值類似于localeAwareCompare函數(shù)。

3、字符串的轉換  由于Qt的跨平臺型,可移植性等特點反映了其在字符串上的靈活性,QString類提供了豐富的轉換函數(shù),可以實現(xiàn)講一個字符串轉換為數(shù)值類型或者其他的字符編碼集。

(1) QString::toInt()函數(shù)實現(xiàn)了將字符串轉換為整型數(shù)值,類似的函數(shù)還有toDouble()、toFloat()、toLong()、toLongLong()等。

1 QString str="125";

2 bool ok;

3 int hex=str.toInt(&ok,16); //ok=true,hex=293

4 int dec=str.toInt(&ok,10); //ok=true,dec=125

可以看到上面的16和10分別代表了進制,ok用于傳遞一個地址,表示轉換結果。

(2) QString提供的字符串編碼集的轉換函數(shù)將會返回一個const char*類型版本的QByteArry,即構造函數(shù)QByteArry(const char*)構造的QByteArry對象。QByteArry類具有一個字符數(shù)組,它既可以存儲原始字節(jié)(raw bytes),也可以存儲傳統(tǒng)的以“