QT学习之QString的arg方法
在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方法
转载.标记一下,总结的很好 转自 http://www.cnblogs.com/lomper/p/4135387.html 在QT的QString中,arg方法类似于C中的printf中使用的格式输出 ...
- QString的arg方法
第一个参数是要填充的数字,第二个参数为最小宽度,第三个参数为进制,第四个参数为当原始数字长度不足最小宽度时用于填充的字符,如 QString name=QString("R%1C%2&quo ...
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的按钮改变缺省文字的方法
在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox增加自定义按钮的方法
在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...
- PyQt(Python+Qt)学习随笔:Designer中QDialogButtonBox确认clicked信号是哪个按钮发送的方法
一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:D ...
- Qt 学习之路 2(68):访问网络(4)
Home / Qt 学习之路 2 / Qt 学习之路 2(68):访问网络(4) Qt 学习之路 2(68):访问网络(4) 豆子 2013年11月7日 Qt 学习之路 2 19条评论 前面几章我们了 ...
- Qt 学习之路 2(60):使用 DOM 处理 XML
Qt 学习之路 2(60):使用 DOM 处理 XML 豆子 2013年8月3日 Qt 学习之路 2 9条评论 DOM 是由 W3C 提出的一种处理 XML 文档的标准接口.Qt 实现了 DO ...
- Qt 学习之路 2(59):使用流处理 XML
Qt 学习之路 2(59):使用流处理 XML 豆子 2013年7月25日 Qt 学习之路 2 18条评论 本章开始我们将了解到如何使用 Qt 处理 XML 格式的文档. XML(eXtensible ...
随机推荐
- Linux系统结构及常用命令
一.系统结构 Linux是一个倒树形结构,最大的目录名叫“/”(根目录) 根目录之下有许多的二级目录,这些目录在系统中都拥有自己不同的功能,如图: 以后的诸多命令的执行和操作都与这些目录相关,现在了解 ...
- CEF和JS交互
CefClient提供所有浏览器事件处理的接口,重写CefClient类中的方法处理浏览器事件:包括Browser的生命周期,右键菜单,对话框,状态通知显示,下载事件,拖曳事件,焦点事件,键盘事件,离 ...
- Java多线程之同步集合和并发集合
Java多线程之同步集合和并发集合 不管是同步集合还是并发集合他们都支持线程安全,他们之间主要的区别体现在性能和可扩展性,还有他们如何实现的线程安全. 同步集合类 Hashtable Vector 同 ...
- http 协议的简单学习 虽然有点老但是 还不错
HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...
- JVM调优总结-Xmx -Xms -Xmn -Xss
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...
- inventor安装失败怎样卸载安装inventor 2018?
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- Unity 组件.name
组件.name 指的是组件所在游戏对象的名字,例如: Animation m_animation; m_animation =GetComponent<Animation>(); m_a ...
- PHP会话管理
Session使用 在每个页面中使用session之前,必须使用session_start() 在每个session中都可以使用$_SESSION这个全局数组,在页面必须调用session_start ...
- 什么是JavaScript Souce Map
第一部分 我们经常可以看到后缀名为.map的文件,比如我们下载得到bootstrap的css文件,如下所示: 不难理解bootstrap.css. bootstrap.min.css.等这些常规的代码 ...
- jQuery源码解读 --- 整体架构
最近学习比较忙,感觉想要提高还是要读源码,所以准备考试这个考试结束就开始读jquery源码啦,加油~