我的QT5學(xué)習(xí)之路(三)――模板庫(kù)、工具類(lèi)和控件(上)
一、前言 “合抱之木,生于毫末;九層之臺(tái),起于壘土;千里之行,始于足下”,上一章我們知道了如何使用Qt創(chuàng)建簡(jiǎn)單的示例程序,了解了最基本的Qt框架,在進(jìn)一步學(xué)習(xí)Qt框架和消息機(jī)制前,我們應(yīng)該對(duì)Qt本身有一個(gè)更細(xì)致的了解,這個(gè)了解就是Qt的模板庫(kù)、工具類(lèi)和控件。
本文引用地址:http://m.butianyuan.cn/article/201808/385045.htm回到頂部(go to top)
二、Qt的模板庫(kù)、工具類(lèi)和控件2.1 字符串類(lèi)1、字符串的操作 我們了解字符串的操作就是要了解字符串主要有哪些操作符,Qt基于C++繼承和強(qiáng)化了string的功能,結(jié)構(gòu)類(lèi)型為QString,QString提供了一個(gè)二元的“+”和“+=”操作符,其中“+=”操作符功能和append函數(shù)方法具有同樣的功能,是現(xiàn)在一個(gè)字符串末尾追加另一個(gè)字符串,學(xué)習(xí)時(shí)可基于C++中String類(lèi)進(jìn)行比較。
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組合字符串的另一個(gè)函數(shù) QString::sprintf(),此函數(shù)支持的格式定義符和C++庫(kù)中的函數(shù)sprintf定義的一樣。Qt還提供了另外一種方便的字符串組合方式,使用QString::arg()函數(shù),此函數(shù)的重載可以處理多種數(shù)據(jù)類(lèi)型,一些重載具有額外的參數(shù)對(duì)字段的寬度、數(shù)字基數(shù)或者浮點(diǎn)數(shù)精度進(jìn)行控制。相對(duì)于sprintf來(lái)說(shuō),srg是一個(gè)比較好的解決方案,因?yàn)樗?lèi)型安全,完全支持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ù)名稱(chēng)函數(shù)功能
insert()在原字符串特定的位置插入另一個(gè)字符串
prepend()在原字符串的開(kāi)頭插入另一個(gè)字符串
replace()用指定的字符串代替原字符串中的某些字符
為了解決特定場(chǎng)景比如去除一個(gè)字符串兩端的空白(空白字符包括回車(chē)字符“n”,換行字符“r”,制表符“t”和空格字符等),QString提供了特定的函數(shù)。
函數(shù)名稱(chēng)函數(shù)功能
trimmed() 移出字符串兩端的空白字符
simplified()移除字符串兩端的空白字符,使用單個(gè)空格字符“ ”代替字符串中出現(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的結(jié)果是“Hello Qt !”
2、查詢字符串?dāng)?shù)據(jù) 查詢字符串?dāng)?shù)據(jù)有多種樣式。
(1) QString::startsWith()判斷一個(gè)字符串是否以某個(gè)字符串開(kāi)頭。此函數(shù)具有兩個(gè)參數(shù),第一個(gè)參數(shù)指定了一個(gè)字符串,第二個(gè)參數(shù)指定是否大小寫(xiě)敏感(默認(rèn)大小寫(xiě)敏感)。
1 QString str=Hello Qt!;
2 str.startsWith(Hello,Qt::CaseSensitive); //返回真
3 str.startsWith(Qt,Qt::caseSenstive); //返回假
(2) QString::endwith()類(lèi)似于QString::startswith(),它用來(lái)判斷一個(gè)字符串是否以某個(gè)字符串結(jié)尾。
(3) QString::contains()判斷一個(gè)指定的字符串是否出現(xiàn)過(guò)。
1 QString str =Hello QT!;
2 str.contains(QT,Qt::CaseSensitive); //返回真
(4) QString類(lèi)還重載了多種用于比較的操作符,用法可參照C++ string類(lèi)中重載的比較操作符。此外,QString類(lèi)增加了兩個(gè)特殊函數(shù)。
localeAwareCompare(const QString,const QString):靜態(tài)函數(shù),比較前后兩個(gè)字符串,如果前面字符串小于后面字符串,則返回值為負(fù)整數(shù);如果等于則返回0;如果大于則返回值為正整數(shù),該函數(shù)用于比較基于本地字符集,而且肫教ㄏ喙氐模通常該函數(shù)用于向用戶顯示一個(gè)有序的字符串列表。
compare(const QString,const QString::CaseSensitivity):該函數(shù)可以指定是否進(jìn)行大小寫(xiě)的比較,而大小寫(xiě)的比較臚耆基于字符的Unicode編碼值的,而且是非常快的,返回值類(lèi)似于localeAwareCompare函數(shù)。
3、字符串的轉(zhuǎn)換 由于Qt的跨平臺(tái)型,可移植性等特點(diǎn)反映了其在字符串上的靈活性,QString類(lèi)提供了豐富的轉(zhuǎn)換函數(shù),可以實(shí)現(xiàn)講一個(gè)字符串轉(zhuǎn)換為數(shù)值類(lèi)型或者其他的字符編碼集。
(1) QString::toInt()函數(shù)實(shí)現(xiàn)了將字符串轉(zhuǎn)換為整型數(shù)值,類(lèi)似的函數(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分別代表了進(jìn)制,ok用于傳遞一個(gè)地址,表示轉(zhuǎn)換結(jié)果。
(2) QString提供的字符串編碼集的轉(zhuǎn)換函數(shù)將會(huì)返回一個(gè)const char*類(lèi)型版本的QByteArry,即構(gòu)造函數(shù)QByteArry(const char*)構(gòu)造的QByteArry對(duì)象。QByteArry類(lèi)具有一個(gè)字符數(shù)組,它既可以存儲(chǔ)原始字節(jié)(raw bytes),也可以存儲(chǔ)傳統(tǒng)的以“