Qt QString類用法總結(jié)

1、append()函數(shù)

函數(shù)1 QString & QString::append ( const QString & str )

   QString x = "free";
   QString y = "dom";

   x.append(y);
   // x == "freedom"

append()函數(shù)與+=操作符功能類似:

   QString x = "free";
   QString y = "dom";
   x+=y;
   // x == "freedom"

還可以使用insert()函數(shù):

x.insert(x.size(), y);
2淆衷、prepend()函數(shù)

QString & QString::prepend ( const QString & str )

 QString x = "ship";
 QString y = "air";
 x.prepend(y);
 // x == "airship"
3、sprintf()函數(shù):

組合字符串的一個完全不同的方式

str.sprintf("%s %.1f%%", "perfect competition", 100.0);

支持同樣的格式說明符像C++庫的sprintf()函數(shù)。
在上面的例子中渊跋,str被賦值為 "perfect competition 100.0%"饿幅。

4、arg()函數(shù):

從另外一個字符串或數(shù)字來構(gòu)建字符串的另外一種方式

str = QString("%1 %2 (%3s-%4s)").arg("permissive").arg("society").arg(1950).arg(1970);

在這個例子中眉尸,"%1"被"permissive"替換,"%2被"society"替換巨双,"%3"被"1950"替換噪猾,而"%4"被 "1970"替換。 結(jié)果是"permissive society (1950s-1970s)"筑累。
arg()重載支持各種各樣的數(shù)據(jù)類型袱蜡。 某些重載有附加參數(shù)來控制域?qū)挘瑪?shù)字基數(shù)慢宗,或浮點精度坪蚁。
通常奔穿,arg()是比sprintf()更好的解決方案,因為它是類型安全(type-safe)的敏晤,完全支持Unicode贱田,并且允許translators對"%n"參數(shù)重新排序。

5嘴脾、字符串與數(shù)字的轉(zhuǎn)換

QString能將數(shù)字轉(zhuǎn)換為字符串男摧,通過使用靜態(tài)函數(shù)QString::number():

str = QString::number(59.6);

或者使用setNum()函數(shù):

str.setNum(59.6);

逆向變換,就是將一個字符串轉(zhuǎn)換為一個數(shù)字统阿,使用的是toInt(), toLongLong(), toDouble()彩倚,等等。例如:

bool ok; double d = str.toDouble(&ok);

這些函數(shù)接受一個可選的bool類型的指針并設(shè)置這個bool變量為TRue或false扶平,這取決于轉(zhuǎn)換成功與否帆离。如果轉(zhuǎn)換失敗,這些函數(shù)返回0结澄。

6哥谷、提取字符串函數(shù) mid()、right()麻献、left()们妥。

mid()函數(shù)返回一個給定起始位置(第一個參數(shù))和長度(第二個參數(shù))的字串。 例如勉吻,下面的代碼在控制臺上打印"pays":

QString str = "polluter pays principle"; qDebug() << str.mid(9, 4);

[*]使用實用的qDebug() << arg語法需要包含頭文件监婶,而qDebug("...", arg)語法在任何至少包含一個Qt頭文件的文件中可用。

如果省略第二個參數(shù)齿桃,mid()返回從指定的起始位置到這個字符串結(jié)尾的子串惑惶。 例如,下面的代碼在控制臺上打印"pays principle":

QString str = "polluter pays principle"; 
qDebug() << str.mid(9);

還有l(wèi)eft()和right()函數(shù)短纵,它們也執(zhí)行類似的工作带污。 他們倆都接受一個表示字符數(shù)量的數(shù)字,n,并返回并返回最前面或最后面的n個字符香到。 例如鱼冀,下面的代碼在控制臺上打印"polluter principle":

QString str = "polluter pays principle"; 
qDebug() << str.left(8) << " " << str.right(9); 
7、一個字符串是否包含某個字符悠就,字串千绪,或正則表達(dá)式,我們可以使用QString的indexOf()函數(shù)中的一個:
QString str = "the middle bit";
 int i = str.indexOf("middle");

i將被置為4理卑。indexOf()函數(shù)返回-1在失敗時翘紊,并接受一個可選的起始位置和大小寫敏感標(biāo)志。

   QString x = "sticky question"; 
   QString y = "sti"; 
   x.indexOf(y);               // returns 0 
   x.indexOf(y, 1);            // returns 10 
   x.indexOf(y, 10);           // returns 10 
   x.indexOf(y, 11);           // returns -1 
8藐唠、檢查一個字符串是否是以某物開始或結(jié)束帆疟,我們可以使用startsWith()和endsWith()函數(shù):

if (url.startsWith("http:") && url.endsWith(".png")) ...

這個要比下面的簡單快速:
if (url.left(5) == "http:" && url.right(4) == ".png") ...

使用==操作符的字符串比較是大小寫敏感的。 如果我們正在比較用戶級(user-visible)字符串宇立,localeAwareCompare()經(jīng)常是正確的選擇踪宠,并且如果我們希望大小寫不敏感,我們可以用toUpper()或toLower()妈嘹。 例如:
if (fileName.toLower() == "readme.txt") ...

9柳琢、用一個字符串替換另一個字符串的某一部分,可以用replace():
QString str = "a cloudy day"; 
str.replace(2, 6, "sunny");

結(jié)果是"a sunny day"润脸。 可以改用remove()和insert():

str.remove(2, 6);
str.insert(2, "sunny");

首先柬脸,我們刪除從位置2開始的6個字符,產(chǎn)生一個字符串"a day"(有兩個空格)毙驯,然后我們在位置2處插入"sunny"倒堕。

有重載版本的replace(),它們能將所有出現(xiàn)第一個參數(shù)的地方用第二個參數(shù)替換爆价。 例如垦巴,這是如何將所有出現(xiàn)"&"的地方用"&"來替換:
str.replace("&", "&");

10、若需要過濾掉字符串中的空白符(如空格铭段,制表符骤宣,和換行符)。 QString有一個函數(shù)能從字符串的兩端刪除空白符:
QString str = " BOB \t THE \nDOG \n";
 qDebug() << str.trimmed();

字符串str可被描述為:

trimmed()返回的字符串是:

當(dāng)處理用戶輸入時序愚,我們經(jīng)常希望將一個或多個內(nèi)部空白符替換為單個空格憔披,另外還要過濾掉兩端的空白符。 這就是simplified()函數(shù)所做的:

QString str = " BOB \t THE \nDOG \n"; 
qDebug() << str.simplified();

simplified()返回的字符串是:

11爸吮、QString::split()函數(shù)拆分字符串:

一個字符串能被分成為一個裝有子串的QStringList芬膝。

QString str = "polluter pays principle";
QStringList words = str.split(" ");
//根據(jù)空格拆分字符串

在上面的例子,我們把"polluter pays principle"分成三個子串: "polluter", "pays", 和 "principle"拗胜。
split()函數(shù)有一個可選的第三個參數(shù)(譯者注:Qt4.4版應(yīng)該是第二個參數(shù))用來決定保留(缺收岷颉)還是丟棄空的子串。

QStringList能被組成單個的字符串埂软,通過使用join()锈遥。 join()的參數(shù)被插入到每對被組合的字符串之間。 例如勘畔,下面展示的是如何創(chuàng)建單個的字符串所灸,它由QStringList中的字符串組成,字符串之間按字母順序排序并用換行符分開:

words.sort(); 
str = words.join("\n"); 
12炫七、Qt下 QString轉(zhuǎn)char*

Qt再使用第三方開源庫時爬立,由于庫的類型基本上都是標(biāo)準(zhǔn)的類型,字符串遇的多的就是Char類型
在Qt下怎樣將QString轉(zhuǎn)char
呢万哪,需要用到QByteArray類侠驯,QByteArray類的說明詳見Qt幫助文檔抡秆。
因為char*最后都有一個‘/0’作為結(jié)束符,而采用QString::toLatin1()時會在字符串后面加上‘/0’
方法如下:

Qstring  str;
char*  ch;
QByteArray ba = str.toLatin1();    
ch=ba.data();

這樣就完成了QString向char的轉(zhuǎn)化吟策。經(jīng)測試程序運行時不會出現(xiàn)bug
注意第三行儒士,一定要加上,不可以str.toLatin1().data()這樣一部完成檩坚,可能會出錯着撩。
補充:以上方法當(dāng)QString里不含中文時,沒有問題匾委,但是QString內(nèi)含有中文時拖叙,轉(zhuǎn)換為char
就是亂碼,采用如下方法解決:
方法1:
添加GBK編碼支持:

#include <QTextCodec>
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));

然后改變上面的第三行為:QByteArray ba = str.toLoacl8Bit();
toLoacl8Bit支持中文赂乐,經(jīng)測試可行J眵ⅰ!沪猴!

方法2:

先將QString轉(zhuǎn)為標(biāo)準(zhǔn)庫中的string類型辐啄,然后將string轉(zhuǎn)為char*,如下:

std::string str = filename.toStdString();
const char* ch = str.c_str();

轉(zhuǎn)自:http://www.cnblogs.com/Romi/archive/2012/03/12/2392478.html
轉(zhuǎn)自:http://blog.chinaunix.net/uid-24205507-id-3262013.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末运嗜,一起剝皮案震驚了整個濱河市壶辜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌担租,老刑警劉巖砸民,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奋救,居然都是意外死亡岭参,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門尝艘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來演侯,“玉大人,你說我怎么就攤上這事背亥∶爰剩” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵狡汉,是天一觀的道長娄徊。 經(jīng)常有香客問我,道長盾戴,這世上最難降的妖魔是什么寄锐? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上橄仆,老公的妹妹穿的比我還像新娘剩膘。我一直安慰自己,他們只是感情好沿癞,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布援雇。 她就那樣靜靜地躺著矛渴,像睡著了一般椎扬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上具温,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天蚕涤,我揣著相機與錄音,去河邊找鬼铣猩。 笑死揖铜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的达皿。 我是一名探鬼主播天吓,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼峦椰!你這毒婦竟也來了龄寞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤汤功,失蹤者是張志新(化名)和其女友劉穎物邑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滔金,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡色解,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了餐茵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片科阎。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖忿族,靈堂內(nèi)的尸體忽然破棺而出锣笨,到底是詐尸還是另有隱情,我是刑警寧澤肠阱,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布票唆,位于F島的核電站,受9級特大地震影響屹徘,放射性物質(zhì)發(fā)生泄漏走趋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一噪伊、第九天 我趴在偏房一處隱蔽的房頂上張望簿煌。 院中可真熱鬧氮唯,春花似錦、人聲如沸姨伟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夺荒。三九已至瞒渠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間技扼,已是汗流浹背伍玖。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留剿吻,地道東北人窍箍。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像丽旅,于是被迫代替她去往敵國和親椰棘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容