QString和QByteArray的用法

其余相關的類

QChar:表示一個Unicode編碼的字符褪贵;
QByteArray:相當于是QChar的一個vector<>翘单;
QStringRef:是對QString一部分的一個引用,作了一些優(yōu)化定铜;
QStringList:是QList的派生類矮锈,是字符串的列表類豺旬,非常有用钠惩;
QRegExp:對于正則表達式提供了豐富的操作,詳細用法族阅;
QTextCodec:提供QString與不同編碼的字符串之間的轉換?


字符串的隱式共享(淺拷貝篓跛、深拷貝)

隱式共享又稱回寫復制。
1耘分、當兩個對象共享同一份數據(通過淺拷貝實現數據塊的共享)時举塔,如果數據不改變绑警,則不進行數據的復制(淺拷貝求泰,引用)央渣。
2、而當某個對象需要改變數據時渴频,則進行深拷貝(堆中開辟空間)芽丹。

Qt中支持隱式共享的類,還包括:
1卜朗、所有的容器類拔第。
2、QString场钉、QByteArray蚊俺、QBrush、QPen逛万、QPalette泳猬、QBitmap、QImage宇植、QPixmap得封、QCursor、QDir指郁、QFont和QVariant等忙上。

?/********?淺拷貝、深拷貝 ******/

//?堆中開辟空間存儲"data"闲坎,str1指向該地址疫粥,該數據結構引用計數為1
QString str1 = "data";?

//淺拷貝,str2 指向?str1中指向的地址 腰懂,str1指向的數據結構引用計數為2
QString str2 = str1;? ?

//深拷貝梗逮,堆存中開辟新的空間,存儲“dsta”悯恍,str2指向?“dsta” 的地址库糠,?引用計數為1;?str1指向"data"地址 涮毫,引用計數為1瞬欧;
str2[1] = 's';??

//無復制,僅對?str2指向的數據結構內容進行修改"bsta"
str2[0] = 'b';?

//? ?原 str1指向的數據結構("data")的引用計數 計0罢防,內存空間被釋放艘虎; str1指向str2所指向的地址,該地址引用計數為2
str1= str3;??


QString類介紹

詳細參見QString類的詳細用法
QString類存儲Unicode?字符串(UTF-16編碼),QString字符串中能嵌入'\0'字符咒吐,length()函數返回整個字符串的大小野建,包括嵌入的'\0'字符属划。

QString轉Qchar時,需先轉換成QByteArray候生。

常用字符串函數如下:

1同眯、字符串拼接

? ??".prepend()"添加前綴
????“.append()” 添加尾綴
? ? ?push_back()、?push_front()唯鸭、?或者直接用重載操作符 " += "须蜗。

QByteArray?str?= "data";???

str.prepend("front ");? ? // 添加前綴, "front?data"
str.append(" tail");? ? // 添加后綴目溉,“data?tail”
str? += “?tail”明肮;? ? //?“data?tail”?


2、組合字符串

? (1)".sprintf()"

QString str缭付;
str.sprintf("Value = %s,%.1f%%", "Val", 90.2);???? //?"Value = Val,90.2%"

? (2)".arg()"

QString str柿估;
str =?QString ("Value?=%1 , %2 ").arg("aa").arg("123");? ? //"Value?= aa , 123"


3、字符串轉數字

?(1)使用靜態(tài)函數QString::number()

str =?QString::number(12.4);

(2)".setNum()"

str.setNum(12.4);


4陷猫、數字轉字符串

? ?使用toInt(), toLongLong(), toDouble()…等函數

QString str = "12";
int i = str.toInt();


5秫舌、提取字符串

(1)".mid(int pos, int len)"?

????????返回【從pos起長度為len】的字符串。

QString str = "white man";
QString str2 = str.mid(6);? ? // "ma"

(2) ".mid(int pos)"

? ? ? ? 返回【從pos起到字符串結尾】的字符串烙丛。

QString str = "white man";
QString str2 = str.left(5);? ? // "man"

(3) ".left(int len)"

? ? ? ? 返回【最前面 長度為len】的字符串舅巷。

QString str = "white man";
QString str2 = str.left(5); ? // "white"

(4) ?".right(int len)"

? ? ? ? 返回【最后面 長度為len】的字符串。

QString str = "white man";
?QString str2 = str.right(3); ? // " man"


6河咽、判斷是否包含某字符串

????".indexOf()"

第一個參數為【待檢字符串 / 字符】钠右;第二個參數為【起始位置】,默認從0字節(jié)開始檢索忘蟹。
檢索成功返回字節(jié)起始位置值飒房,檢索失敗返回 -1。

QString str = "white man";
?int i = str.indexOf("man");? ? // i = 6
?int ii = str.indexOf("ba");? ? // ii = -1??


7媚值、判斷字符串是否以某字符(串)開始或者結束

(1)"startsWith()"

檢查字符串是否以【字符串 / 字符】開始狠毯,成功則返回true,失敗則返回false褥芒。

QString str="http:www.baidu.com";
int i =str.startsWith("http:");? ? // " i = 1 "

(2)"endsWith()"

檢查字符串是否以【字符串 / 字符】結尾嚼松,成功則返回true,失敗則返回false锰扶。

QString str="http:www.baidu.com";
int i =str.startsWith("cn");? ? // "?i = 0 "


QByteArray類介紹

QByteArray類存儲char型字符献酗。

/***** QByteArray數組???定義與賦值****/
QByteArray ba;
ba.size(5);? ? ?//size()大小,不包含‘\0’坷牛; qstrlen()包含'\0'
ba[0] = 0x3e;
ba[2] = 0x01;
ba[3] = 0x00;
ba[4] = 0xff;

?/******** 淺拷貝罕偎、深拷貝 ******/
?//?堆中開辟空間存儲"data",str1指向該地址京闰,該數據結構引用計數為1?
QByteArray str1 = "data";?
??
? //淺拷貝颜及,str2 指向?str1中指向的地址 甩苛,str1指向的數據結構引用計數為2
QByteArray str2 = str1;? ?

?//深拷貝,堆存中開辟新的空間俏站,存儲“dsta”讯蒲,str2指向?“dsta” 的地址,?引用計數為1乾翔;?str1指向"data"地址 爱葵,引用計數為1施戴;
str2[1] = 's';??

//無復制反浓,僅對 str2指向的數據結構內容進行修改"bsta"
str2[0] = 'b';??

/************ 訪問數組 *********/??
for( int i = 0 ; i < ba.size() ; i++ )
{
????if ( ba.at( i ) >=? ' a ' &&? ba.at( i ) <= ' z '? )? ? ?//at()為淺拷貝,只讀拷貝;與[ ]效果一樣
????{
????????// dosomething?
?????}
}


?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末赞哗,一起剝皮案震驚了整個濱河市雷则,隨后出現的幾起案子,更是在濱河造成了極大的恐慌肪笋,老刑警劉巖月劈,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異藤乙,居然都是意外死亡猜揪,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門坛梁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來而姐,“玉大人,你說我怎么就攤上這事划咐∷┠睿” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵褐缠,是天一觀的道長政鼠。 經常有香客問我,道長队魏,這世上最難降的妖魔是什么公般? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮胡桨,結果婚禮上官帘,老公的妹妹穿的比我還像新娘。我一直安慰自己登失,他們只是感情好遏佣,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著揽浙,像睡著了一般状婶。 火紅的嫁衣襯著肌膚如雪意敛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天膛虫,我揣著相機與錄音草姻,去河邊找鬼。 笑死稍刀,一個胖子當著我的面吹牛撩独,可吹牛的內容都是我干的。 我是一名探鬼主播账月,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼抑堡,長吁一口氣:“原來是場噩夢啊……” “哼趴生!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤杯矩,失蹤者是張志新(化名)和其女友劉穎沐祷,沒想到半個月后钞螟,有當地人在樹林里發(fā)現了一具尸體悔醋,經...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年谣妻,在試婚紗的時候發(fā)現自己被綠了萄喳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹋半,死狀恐怖他巨,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情湃窍,我是刑警寧澤闻蛀,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站您市,受9級特大地震影響觉痛,放射性物質發(fā)生泄漏。R本人自食惡果不足惜茵休,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一薪棒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧榕莺,春花似錦俐芯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至唠雕,卻和暖如春贸营,著一層夾襖步出監(jiān)牢的瞬間吨述,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工钞脂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留揣云,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓冰啃,卻偏偏與公主長得像邓夕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子阎毅,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內容

  • 與C++的string以及MFC中的CString類似的焚刚,在QT5中使用的字符串類。 QString類的構造:可以...
    shyoskyo閱讀 465評論 0 2
  • Qt對象模型 信號和槽净薛、對象屬性系統汪榔、事件和事件過濾器、國際化翻譯機制肃拜、定時器驅動、守衛(wèi)指針(QPoint)雌团、動態(tài)...
    愛笑的人26閱讀 1,143評論 2 3
  • 一燃领、提出問題。 問題一: 一個對象 的字符串用 copy進行修飾锦援,外界修改這個字符串的數值猛蔽,會導致引用的這個字符串...
    蕭修閱讀 1,140評論 0 1
  • 容器 在實際的開發(fā)過程中略板, 數據結構本身的重要性不會遜于操作于數據結構的算法的重要性毁枯, 當程序中存在著對時間要求很...
    編程小兔崽閱讀 1,088評論 0 1
  • 前言: 《朱子語類》卷九《論知行》篇中說: “不可去名上理會。須求其所以然挠蛉〖朗荆” 作為一名Java新晉程序員,夯實基...
    鯊魚愛吃蔬菜閱讀 193評論 0 1