QT学习之QString的arg方法

  • Post author:
  • Post category:其他




在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(只是有点类似)。


在QT5的帮助文档中,可以看出以下几点:


  1. 使用arg(str1, str2, str3)这种方法进行替换。


  2. 使用arg(str1).arg(str2).arg(str3)这种方法进行替换。


  3. ​使用arg(int, int, int)这种方式进行替换。



解释以下两种方法:




一:使用


arg(str1, str2, str3)




这种方法要求str1、str2、str3都为const QString &类型,即:


1


QString QString::arg(


const


QString & a1,


const


QString & a2,


const


QString & a3)


const


同时,arg( )里的参数实现从1个到9个,也就是说

最多只能有9个

!即在实现中,arg的定义中参数最多的为:


1


QString QString::arg(


const


QString & a1,


const


QString & a2,


const


QString & a3,


const


QString & a4,


const


QString & a5,


const


QString & a6,


const


QString & a7,


const


QString & a8,


const


QString & a9)


const


这也就意味着,如果有如下代码:


1

2



QString

str = QString(


"%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11"


).





arg(


"1"


,


"2"


,


"3"


,


"4"


,


"5"


,


"6"


,


"7"


,


"8"


,


"9"


)


str将只会输出:


1


"1 2 3 4 5 6 7 8 9 %10 %11"


解决方法为在后面再加一个arg方法,放上后面两个对应的参数:


1

2

3

4


QString str = QString(


"%1 %2 %3 %4 %5 %6 %7 %8 %9 %10 %11"


).





arg(


"1"


,


"2"


,


"3"


,


"4"


,


"w"


,


"6"


,


"7"


,


"8"


,


"9"


).arg(


"a"


,


"b"


);



//输出为:



// "1 2 3 4 5 6 7 8 9 a b"



注意:

在QT5帮助文档中,给出了如下代码:


1

2

3

4

5


QString str;



str =


"%1 %2"


;




str.arg(


"%1f"


,


"Hello"


);


// returns "%1f Hello"



str.arg(


"%1f"


).arg(


"Hello"


);


// returns "Hellof %2"


如果你copy这个代码去测试一下,会发现,输出结果还是:


“%1 %2”


。根本没有其给出的结果。(没找到源码,有谁知道怎么查看QT的源码,求帮助!说找src文件夹的就不要来了,根本木有)


所以在使用的时候一定要注意一下。要紧跟字符串使用arg( ) 。



二.使用


arg(str1).arg(str2).arg(str3)


这种方法其实前面用到了,如下面例子:


1

2


QString str=QString(


"%1 %2 %3 %4"


).arg(


"A"


).arg(


"B"


).arg(


"C"


).arg(


"D"


);



//str=="A B C D"


简单说就是挨着替换呗。但请注意下面的形式:


1

2

3

4

5

6

7

8

9


str = QString(


"%1 %2"


).arg(


"%1World"


,


"Hello"


);



qDebug()<<str;



//输出为:"%1World Hello"




str = QString(


"%1 %2"


).arg(


"%1World"


).arg(


"Hello"


);



qDebug()<<str;



//输出为:"HelloWorld %2"



//第一个arg执行完后变为:QString("%1World %2").arg("Hello")



//再次执行后"Hello"替换的为%1




所以在使用多个arg( )连接时,一定要注意,前面连接使用的arg( )里如果有“%+数字”的情况,后面的arg( )会同样替换!



请注意下列例子:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16


str = QString(


"%1 %2"


).arg(


"%1World"


).arg(


"Hello"


);



//输出:"HelloWorld %2"



str = QString(


"%1 %2"


).arg(


"%2World"


).arg(


"Hello"


);



//输出:"HelloWorld Hello"



str = QString(


"%1 %2"


).arg(


"%3World"


).arg(


"Hello"


);



//输出:"%3World Hello"



str = QString(


"%1 %2"


).arg(


"%8World"


).arg(


"Hello"


);



//输出:"%8World Hello"



str = QString(


"%1 %6"


).arg(


"%3World"


).arg(


"Hello"


);



//输出:"HelloWorld %6"



str = QString(


"%2 %6"


).arg(


"%3World"


).arg(


"Hello"


);



//输出:"HelloWorld %6"



str = QString(


"%0 %6"


).arg(


"%3World"


).arg(


"Hello"


);



//输出:"HelloWorld %6"



str = QString(


"%-1 %6"


).arg(


"%3World"


).arg(


"Hello"


);



//输出:"%-1 HelloWorld"



arg( )里的参数在进行替换时,只会按照数字从小到大的顺序进行替换,只有比当前数字小的


所有数字都替换完成了,才会替换当前数字,否则将当前数字和%按字符串处理。且

数字为自然数





三. 使用arg(int, int, int)


原型【1】为:


1


QString QString::arg(


int


a,


int


fieldWidth = 0,


int


base = 10, QChar fillChar = QLatin1Char(


' '


))


const


a:表示要处理的数字;fieldWidth:字宽;base:数字基数


如下列:


1

2

3

4

5

6

7

8

9

10

11

12


str = QString(


"十进制 63 的十进制为 %1"


)





.arg(


63


,


0


,


10


);



//输出:"十进制 63 的十进制为 63"



str = QString(


"十进制 63 的十六进制为 %1"


)





.arg(


63


,


0


,


16


);



//输出:"十进制 63 的十六进制为 3f"



str = QString(


"%1 %L2 %L3"


)





.arg(


12345


)





.arg(


1987654321


)


//根据结果,可知道这个L的作用





.arg(


12345


,


0


,


8


);


//但使用这种方式时,L失效



//输出为:12345 1,987,654,321 30071



//这里%L3的L没有任何作用


在原型【1】中的a的类型还可以是uint、long、double、udouble等数字的类型!


这里当a的类型为double时,原型为:


1


QString QString::arg(


double


a,


int


fieldWidth = 0,


char


format =


'g'


,


int


precision = -1, QChar fillChar = QLatin1Char(


' '


))


const


多了两个参数:format和precision,一个指明规格,一个指明精度。规格默认为 ‘g’ 或 ‘G’,指示后面的精度为整数和小数部分总和的长度;规格为’e’或 ‘E’ 时,表示为科学记数法形式,精度部分指示的为小数部分的位数长度;规格为其他字符时,无作用,输出原double数字。如:


1

2

3

4

5

6

7

8

9

10

11

12

13


double


d = 12.345689;



str = QString(


"delta: %1"


).arg(d, 0,


'g'


,4);



//输出为:"delta: 12.35"     ---这里进行了四舍五入



str = QString(


"delta: %1"


).arg(d, 0,


'G'


,5);



//输出为:"delta: 12.346"     ---这里进行了四舍五入



str = QString(


"delta: %1"


).arg(d, 0,


'e'


,4);



//输出为:"delta: 1.234e+01"



str = QString(


"delta: %1"


).arg(d, 0,


'E'


,4);



//输出为:"delta: 1.234E+01"



str = QString(


"delta: %1"


).arg(d, 0,


'r'


,4);



//输出为:"delta: 12.345689"



str = QString(


"delta: %1"


).arg(d, 0,


'Q'


,4);



//输出为:"delta: 12.345689"


转载自:



http://www.cnblogs.com/lomper/p/4135387.html