QT之QString的arg方法
转载。标记一下,总结的很好
转自 http://www.cnblogs.com/lomper/p/4135387.html
在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(只是有点类似)。
在QT5的帮助文档中,可以看出以下几点:
使用arg(str1, str2, str3)这种方法进行替换。
使用arg(str1).arg(str2).arg(str3)这种方法进行替换。
使用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" | 
QT之QString的arg方法的更多相关文章
- Qt QString的arg()方法的使用
		
1.QString的arg()方法用于填充字符串中的%1,%2...为给定的参数,如 QString m = tr("); // m = "12:60:60: 2.它还有另外一种重 ...
 - QT学习之QString的arg方法
		
在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(只是有点类似). 在QT5的帮助文档中,可以看出以下几点: 使用arg(str1, str2, str3)这种方法进行替 ...
 - QString的arg方法
		
第一个参数是要填充的数字,第二个参数为最小宽度,第三个参数为进制,第四个参数为当原始数字长度不足最小宽度时用于填充的字符,如 QString name=QString("R%1C%2&quo ...
 - Qt中 QString 和int, char等的“相互”转换
		
转载:http://blog.csdn.net/ei__nino/article/details/7297791 Qt中 int ,float ,double转换为QString 有两种方法 1.使用 ...
 - Qt中 QString 和int, char等的“相互”转换,关键是QString.toLocal8Bit().data();
		
Qt中 int ,float ,double转换为QString 有两种方法 1.使用 QString::number(); 如: long a = 63; QString s = QString:: ...
 - QT中QString 与 int float double 等类型的相互转换
		
Qt中 int ,float ,double转换为QString 有两种方法 1.使用 QString::number(); 如: long a = 63; QString s = QString:: ...
 - Qt中 QString 和int,double等的转换
		
Qt中 int ,float ,double转换为QString 有两种方法 1.使用 QString::number(); 如: long a = 63; QString s = QString:: ...
 - Qt中静态变量使用方法
		
静态变量可以在各个页面之前使用 先定义一个用于存放静态变量的类 例如datavar 在datavar.h中添加如下代码 #ifndef DATAVAR_H #define DATAVAR_H #inc ...
 - Qt下libusb-win32的使用方法(转)
		
源:Qt下libusb-win32的使用方法 之前一直找不到适合WIN7下的Tiny6410的USB下载软件,正好这几天开始学习USB,所以打算自己写一个专门用于Tiny6410的WIN7下的USB下 ...
 
随机推荐
- ArcGIS Python 保存lyr
			
import arcpy ##################my = arcpy.GetParameterAsText(0)mylyrfile = arcpy.GetParameterAsText( ...
 - 简易总结react-hook三大基础
			
react-hook的最重要的三大基础 import { useEffect, useState, useContext } from 'react' 1.每一个简单的一句话总结 useEffect ...
 - UTC ISO 8601
			
如果时间在零时区,并恰好与协调世界时相同,那么(不加空格地)在时间最后加一个大写字母Z.Z是相对协调世界时时间0偏移的代号.如下午2点30分5秒表示为14:30:05Z或143005Z:只表示小时和分 ...
 - Spring+Ibatis开发
			
Spring+Ibatis开发:1.首先回忆Spring+Hibernate开发:那么时候我们是先加入的Spring,然后在加入Hibernate支持包的,而此时我们Spring+Ibatis开发,原 ...
 - [Spark] Scala programming - basic level
			
环境配置 IDE: https://www.jetbrains.com/idea/ 子雨大数据之Spark入门教程(Scala版) /* implement */ 语言特性 Online compil ...
 - java使用nio(Paths,Files)遍历文件目录,转成java.io.File
			
String directory = "C:\\Users\\Administrator\\AppData\\Local\\Temp\\8ad088a2-0bb3-41dc-89d9-2c5 ...
 - uni-app 使用本地打包配置安卓原生插件
			
在使用 uni-app 开发的时候,遇到了一个很棘手的问题.即获取设备参数的时候 uni-app 并没有相关方法,而安卓开发是可以做到的,因为接的是三方推广,所以功能必须实现,所以求助了安卓的大佬帮我 ...
 - Java网络编程简明教程
			
Java网络编程简明教程 网络编程 计算机网络相关概念 计算机网络是两台或更多的计算机组成的网络,同一网络内的任意两台计算机可以直接通信,所有计算机必须遵循同一种网络协议. 互联网 互联网是连接计算 ...
 - python之pip使用技巧
			
pip 镜像临时使用:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider永久:直接在user目录中创建一个pip目录:C: ...
 - nRF5 SDK Bootloader and DFU moudles(1)
			
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行.可以初始化硬件设备.建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境. 在嵌 ...