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