5_1_1_Qt字符串类QString的基本使⽤
1.WHAT
------1)标准C++提供了两种字符串:⼀种是C语⾔风格以“\0”字符结尾的字符数组;另⼀种是字符串类String。⽽Qt给我们提供的字符串类QString功能更强⼤。
------2)QString类保存16位Unicode值,提供了丰富的操作,查询和转换等函数。
2.HOW(需要包含头⽂件<QString>)
2.HOW
------1)字符串的操作:创建字符串对象(测试项⽬是QWidget的基类,⽆UI)
1. //创建字符串对象
2. QString s1("hello");//使⽤字符常量构造:const char *
3. QString s2 ="qt";//使⽤赋值构
------2)字符串拼接
---------①QString也提供了⼀个⼆元的“+”操作符⽤于组合两个字符串,并提供了“+=”操作符⽤于将⼀个字符串追加到另⼀个字符串的末尾(运算符重载),也可⽤append追加字符串。
1. //运算符重载,拼接字符串
2. QString s3 =s1+s2;
3. qDebug()<<"s3="<<s3;//s3= "hello qt"
4. s3 +="!";//或者+=QString对象
5. qDebug()<<"s3="<<s3;//s3= "hello qt!"
6. //append⽅式追加
7. QString s4 ="hello";
8. s4.append(" world!");//使⽤append⽅式追加
9. qDebug()<<"s4="<<s4;//s4= "hello world!
-
--------②QString::sprintf();//不常⽤,功能和C++定义⼀样,设计到编码问题qt中很少使⽤,尤其涉及到使⽤变量组包的时候
1. //sprintf⽅式实现:很少⽤
2. QString s10;
3. s10.sprintf("%s","Welcom1e");
4. qDebug()<<"s10="<<s10;//s10= "Welcom1e"
5. s10.sprintf("%s","to you!");
6. qDebug()<<"s10="<<s10;//s10= "to you!"
7. s10.sprintf("%s %s","Welcome","to you!");
8. qDebug()<<"s10="<<s10;//s10= "Welcome to you!"
---------③QString::arg(); //常⽤的组包⽅式
此函数可以重载处理很多种数据类型,此外,⼀些重载具有额外的参数,对字段的宽度、整型、浮点型的精度进⾏控制。通常,相对于函数QString::sprintf(),这个函数是⼀个⽐较好的解决⽅案,因为类型安全,完全⽀持Unicode,允许改变“%n”参数的顺序,例如:
1. //QString::arg();
2. QString s20 ="yongheng0";
3. int n =852;
4. QString s21 =QString("%1.%2%4.%3").arg("www").arg(s20).arg("com").arg(n);
5. qDebug()<<"s21="<<s21;//s21= "heng0852"
6. //等价于
7. QString s22 ="www."+s20 +QString::number(n)+"";
8. qDebug()<<"s22="<<s22;//s22= "heng0852"
------------a)%1:使⽤“arg("www")”替换
------------b)%2:使⽤ 字符串对象“arg(s20)”的内容yongheng0替换
------------c)%4:使⽤ 整型变量“arg(n)”的内容 852 替换
------------d)%3:使⽤“arg("com")”替换
------------e)等价于:22 = "www." +s20 + QString::number(n)+ "";//但这种+的⽅式不利于格式化⽅式组包。
---------④ 其他⽅式的字符串操作:QString也提供了⼀些其他组合字符串的⽅法包括以下⼏种:
------------a)insert()在字符串的任意位置插⼊⼀个字符串
1. //insert()在字符串的任意位置插⼊⼀个字符串
2. QString s30 ="yongheng";
3. QString s31 ="0852";
4. s30.insert(8,&s31);//在字符串第8个位置插⼊s31这个字符串
5. qDebug()<<"s30="<<s30;//s30= "yongheng0852"
------------b)prepend()在字符串的开头位置插⼊⼀个字符串
1. s30.prepend("www.");
2. qDebug()<<"s30="<<s30;//s30= "heng0852"
------------c)replace()字符串替换
1. place("www","www");//把www替换为http⽅式
2. qDebug()<<"s30="<<s30;//s30= "heng0852"
------------d)trimmed()移除两端的空⽩字符
1. //trimmed()移除两端的空⽩字符
2. QString s40 =" www.\tyongheng0852.\ncom ";
3. qDebug()<<"s40="<<s40;//s40= " www.\tyongheng0852.\ncom "
4. s40 = immed();//返回⼀个去除空格的对象
5. qDebug()<<"s40="<<s40;//s40= "www.\tyongheng0852.\ncom"
------------b)simplified()移除两端空表字符和中间的特殊转义字符(转义字符⽤空格替换)
1. //simplified()移除两端空表字符和中间的特殊转移字符(⽤空格替换)
2. QString s41 =" hello\nworld\t! ";
3. qDebug()<<"s41="<<s41;//s41= " hello\nworld\t! "
4. s41 = s41.simplified();
5. qDebug()<<"s41="<<s41;//s41= "hello world !"
------3)查询字符串的数据
---------①startsWith(); 以某个字符串开头
(有两个参数,第⼀个参数是需要查的字符串,第⼆个参数是,是否区分⼤⼩写,第⼆个参数可以不写,默认是区分⼤⼩写的) (Sensitive:敏感的; Insensitive 不敏感的)
1. QString s50 ="heng085
2";
2. qDebug()<<s50.startsWith("www.");//默认区分⼤⼩写,返回true
3. qDebug()<<s50.startsWith("wWw.");//默认区分⼤⼩写,返回false
4. qDebug()<<s50.startsWith("wWw",Qt::CaseSensitive);//区分⼤⼩写.返回false
5. qDebug()<<s50.startsWith("wWw",Qt::CaseInsensitive);//忽略⼤⼩写,返回true
---------②endWith(); 以某个字符串结尾(和startWith⽤法类似)
1. qDebug()<< dsWith("coM",Qt::CaseInsensitive);//忽略⼤⼩写,返回true
---------③ contains();判断是否包含某个字符串
1. qDebug()<&ains("yongHENG",Qt::CaseSensitive);//区分⼤⼩写:false
2. qDebug()<&ains("yongHENG",Qt::CaseInsensitive);//不区分⼤⼩写:true
------4)⽐较字符串⼤⼩
和c/c++⼀样是以ascii码的⽅式⽐较字符串,当第⼀个字符不相同时,结果就确定,不会再继续向下⾯⽐较。 a<z(ascii) ---------①运算符重载"<,<=,==<,>,>="; 运算符左边的ascii码和右边的ascii逐位⽐较,结果为bool类型。
1. QString s60 ="cabc";
2. //重载⽐较运算符,返回bool
3. qDebug()<<(s60 <"b");//false
4. qDebug()<<(s60 <="b");//false
5. qDebug()<<(s60 =="b");//false
6. qDebug()<<(s60 >"b");//true
7. qDebug()<<(s60 >="b");//true
8. qDebug()<<(s60 <"d");//true
---------②localeAwareCompare();使⽤本地字符集locale⽐较,返回整型,⼤于返回正整数,等于返回
0,⼩于返回负整数
(有两个参数,分别为需要⽐较的字符串)
1. int ret =0;
2. ret =QString::localeAwareCompare(s60,"abcdef");//ret= 1
3. qDebug()<<"ret="<<ret;
4. ret =QString::localeAwareCompare(s60,"cabc");//ret= 0
5. qDebug()<<"ret="<<ret;
6. ret =QString::localeAwareCompare(s60,"gabcef");//ret= -1
7. qDebug()<<"ret="<<ret;
---------③QString::compare();可指定区分⼤⼩写的⽐较,如果不相等,返回值和localeAwareCompare的返回值⽅式类似。
1. ret =QString::compare("bcd","bcd");//默认区分⼤⼩写:0
2. qDebug()<<"ret="<<ret;
3. ret =QString::compare("bcd","Bcd");//默认区分⼤⼩写:32
4. qDebug()<<"ret="<<ret;
5. ret =QString::compare("bcd","Bcd",Qt::CaseSensitive);//区分⼤⼩写:32
6. qDebug()<<"ret="<<ret;
7. ret =QString::compare("bcd","Bcd",Qt::CaseInsensitive);//不区分⼤⼩写:0
8. qDebug()<<"ret="<<ret;
------5)字符串转换
---------①字符串 --> 基础数据(int等):
函数原型:(int QString::toInt(bool *ok = Q_NULLPTR, int base = 10) const)
参数1接收转换的结果,转成功为true,失败false,参数2,是指定字符串内的原始数据是多少进制的,也就是说,是需要把字符串中的数据是以多少进制转换为10进制。)
参数1和参数2可以不指定,参数1不指定时,不接收转换结果。
参数2不指定时默认字符串中的数据是10进制的)
参数2不指定时,默认为10进制,如果设置为0时,则会使⽤c语⾔的转换⽅法,即:如果字符串以“0x”开头,则基数为16,如果以“0”开头,则基数为8,其他情况,基数都为10;
------------a)QString::toInt(⽆参数);
1. QString s70 ="0168";
2. int a70 = Int();
3. qDebug()<<"a70="<<a70;//a70= 168
4.
5. s70 ="0.168";
6. double a71 = Double();
7. qDebug()<<"a71="<<a71;//a71= 0.168
8.
9. s70 ="hello qt";
10. a70 = Int();
11. qDebug()<<"a70="<<a70;//转换失败,数据为0
---------②QString::toInt(参数1,参数2); 对转换结果进⾏判断,并按照指定的进制基数进⾏转换。
1. bool ok =false;
2. s70 ="0168";
3. a70 = Int(&ok,16);//指定字符串中的数据是16进制,把他转换为10进制
4. if(ok)
5. {
6. qDebug()<<"s70 = 0168:"<<"16进制转换10进制成功,数据是:"<<a70;//数据是:360
7. }
8. else
9. {
10. qDebug()<<"s70 = 0168:"<<"16进制转换10进制失败!";
11. }
12.
13. s70 ="0167";//如果数据超过了8进制的范围,则转换失败
14. a70 = Int(&ok,8);
15. if(ok)
16. {
17. qDebug()<<"s70 = 0167:"<<"8进制转换10进制成功,数据是:"<<a70;//数据是:119
18. }
19. else
20. {
21. qDebug()<<"s70 = 0167:"<<"8进制转换10进制失败!";
22. }
23.
24. s70 ="hello qt";
25. a70 = Int(&ok);//不指定第⼆个参数默认转换为10进制
26. if(ok)
27. {
28. qDebug()<<"s70 = hello qt :"<<"转换成功,数据是:"<<a70;
29. }
30. else
31. {
32. qDebug()<<"s70 = hello qt :"<<"转换失败!";//数据转换失败
33. }
---------②基础数据(int等) --> 字符串:
------------a)QString::arg(); 组包的⽅式:
1. int b =100;
2. QString s80 =QString("%1").arg(b);
3. qDebug()<<"s80="<<s80;//s80= "100"
------------b)QString::number(); 更简便的⽅式:
1. b =200;
2. s80 =QString::number(b);
3. qDebug()<<"s80="<<s80;//s80= "200"
4.
5. double d =0.852;
6. s80 =QString::number(d);
7. qDebug()<<"s80="<<s80;//s80= "0.852"
---------③标准string和QTstring的互换(引⼊了c++的iostream的头⽂件,和string头⽂件)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论