其余相關的類
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?
?????}
}