Qt開發(fā)之QString類的使用教程詳解
介紹
采用Unicode編碼
采用隱式共享技術(shù),節(jié)省內(nèi)存和不必要的數(shù)據(jù)拷貝
隱式共享介于淺拷貝和深拷貝之間,當兩個string對象賦值時,會實現(xiàn)淺拷貝(共享一塊內(nèi)存),如果某個對象被修改了,則會實現(xiàn)深拷貝(從新開辟內(nèi)存)
跨平臺使用,不需要考慮不同平臺的兼容性
QString直接支持字符串與數(shù)字的相互轉(zhuǎn)換
QString直接支持字符串大小比較
QString直接支持不同字符編碼間的相互轉(zhuǎn)換
QString直接支持std::string和std::wstring的相互轉(zhuǎn)換
QString直接支持正則表達式的應用
QString常用函數(shù)
static const QChar data[4] = { 0x0055, 0x006e, 0x10e3, 0x03a3 }; QString str(data, 4); //通過QChar寬字符初始化 str = "hello"; //直接賦值 str.length(); //獲取字符串長度 str.size(); //獲取字符串數(shù)量,等價于length() str.capacity(); //獲取容量,容量包含了當前string里不必增加內(nèi)存就能使用的字符數(shù) str.isEmpty(); //如果str為空或為0 ,則返回true,否則返回false str.isNull(); //如果為0,則返回true,否則返回false str.clear(); //清空str str. resize(8); //設(shè)置str的字符串長度 str.fill('m'); //將str字符串,全部字符填為'm' str.fill('m',5); //填充5個字符'm',并修改str的字符串長度為5 str.append("ABC"); //在str字符串末尾附加"ABC"子串 str.prepend("abc"); //在str字符串頭部添加"abc"子串 str. chop(2); //從str字符串末尾, 去掉2個字符 str = "Montreal"; str.remove(1, 4); //從str下標1位置開始,清除4個字符, s = "Meal" str.setNum(1234.5); //數(shù)字轉(zhuǎn)字符串 str = "1234.5" double val = str.toDouble(); //字符串轉(zhuǎn)double val =1234.5 /*arg()成員函數(shù):通過string串里通過“%數(shù)字”表示argument(參數(shù)) */ str = QString("%1,%2,%3,%4,%5,%6") .arg("A","B","C") .arg("D","E","D"); //字符串參數(shù)替換 str1 = "A,B,C,D,E,D" str = QString("%1,%2") .arg(40) .arg(40,0,16); //將40以16進制轉(zhuǎn)換為字符串,如果想使用大寫的話,通過toUpper()函數(shù)來實現(xiàn) //還可以這樣寫QString("%1").arg(cnt,5,10,QChar('0'); //輸出00050,表示保留5位有效數(shù)字,
floatcnt2=50.12345;
qDebug()<<QString::asprintf("%.2f",cnt2); //打印50.12
str.sprintf("%d %s",1,"first"); //通過一定參數(shù)輸出到字符串里, str= "1 first" str="abcdef"; str.indexOf ("bc"); //return 1 str.indexOf ("bc",1); //從str下標1的位置查找,return 1 str.indexOf ("bc",2); //沒找到,則return -1 str. lastIndexOf("bc"); //反向查找,從str末尾向前查找,return 1 str. lastIndexOf("bc",5); //反向查找,從str下標5的位置向前查找,return 1 str.lastIndexOf("bc",-2); //反向查找,從str末尾-1的位置向前查找 str.insert( 2, "AB "); //在str字符串下標2的位置插入"AB "子串 str="abcdefgh"; str2 = str.mid(3); //提取子串,提取出str的下標為3到末尾,給str2 str2 = str.mid(3,4); //從str的下標為3開始,提取4個字符給str2 str = "th!ea minimum"; str.indexOf(QRegExp("[m i!]"), 0); // 使用正則表達式匹配查找,遇到m, ,i,! 時停止 ,所以return 2
long a = 63;
QString s = QString::number(a, 16); // s == "3f" QString t = QString::number(a, 16).toUpper(); // t == "3F"
QString str = "Bananas"; str.startsWith("Ban"); //判斷str的開頭是否以"Ban"開頭,returns true str.startsWith("Car"); // returns false
常用四則運算符
QString str="*+-"; str.indexOf(QRegExp("[+-]")); //匹配一次+或-,所以return 1 str="*asd12345682"; str.indexOf(QRegExp("23")); //匹配23成功,return 5 str="*abcsd8de"; str.indexOf(QRegExp("[0-9]")); //匹配一次0~9數(shù)字,所以return 6
示例-通過四則運算匹配一個范圍的數(shù)字
比如:
12.5-19.5Kg :提取出12.5 和19.5
125.68m~376.78m :提取出125.68和376.78
999.99美元 :提取出999.99
代碼如下:
QString text = ui->stringText->text(); QString number1,number2; int begin1=text.indexOf(QRegExp("[0-9]")); text.remove(0,begin1); int begin2=text.indexOf(QRegExp("[^0-9.]")); //找非0~9,小數(shù)點以外的字符位置 if(begin1==-1) { qDebug()<<"err"; return ; } if(begin2!=-1) //比如 123XYZ number1 = text.left(begin2); else //只有一個數(shù)字 { number1 = text; qDebug()<<"range:"<<number1.toFloat(); return ; } text.remove(0,begin2); begin1=text.indexOf(QRegExp("[0-9]")); text.remove(0,begin1); begin2=text.indexOf(QRegExp("[^0-9.]")); //找非0~9,小數(shù)點以外的字符位置 if(begin1==-1) //只有一個數(shù)字 { qDebug()<<"range:"<<number1.toFloat(); return ; } if(begin2!=-1) //比如 123XYZ number2 = text.left(begin2); else number2 = text; qDebug()<<"range:"<<number1.toFloat()<<"~"<<number2.toFloat();
打印如下:
其它使用:
QByteArray QString::toLocal8Bit () ; //獲取字節(jié)數(shù)組對象 char * QByteArray::data (); //通過字節(jié)數(shù)組對象的成員data函數(shù),獲取char數(shù)組
QString("%1").arg(cnt,5,10,QChar('0')
以上就是Qt開發(fā)之QString類的使用教程詳解的詳細內(nèi)容,更多關(guān)于Qt QString類的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
引用參數(shù)和傳值參數(shù)的區(qū)別深入解析
以下是對引用參數(shù)和傳值參數(shù)的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下2013-07-07