在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"

菜鸟一枚,欢迎指出错误之处!

QT学习之QString的arg方法的更多相关文章

  1. Qt QString的arg()方法的使用

    1.QString的arg()方法用于填充字符串中的%1,%2...为给定的参数,如 QString m = tr("); // m = "12:60:60: 2.它还有另外一种重 ...

  2. QT之QString的arg方法

    转载.标记一下,总结的很好 转自 http://www.cnblogs.com/lomper/p/4135387.html 在QT的QString中,arg方法类似于C中的printf中使用的格式输出 ...

  3. QString的arg方法

    第一个参数是要填充的数字,第二个参数为最小宽度,第三个参数为进制,第四个参数为当原始数字长度不足最小宽度时用于填充的字符,如 QString name=QString("R%1C%2&quo ...

  4. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的按钮改变缺省文字的方法

    在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...

  5. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox增加自定义按钮的方法

    在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...

  6. PyQt(Python+Qt)学习随笔:Designer中QDialogButtonBox确认clicked信号是哪个按钮发送的方法

    一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:D ...

  7. Qt 学习之路 2(68):访问网络(4)

    Home / Qt 学习之路 2 / Qt 学习之路 2(68):访问网络(4) Qt 学习之路 2(68):访问网络(4) 豆子 2013年11月7日 Qt 学习之路 2 19条评论 前面几章我们了 ...

  8. Qt 学习之路 2(60):使用 DOM 处理 XML

    Qt 学习之路 2(60):使用 DOM 处理 XML  豆子  2013年8月3日  Qt 学习之路 2  9条评论 DOM 是由 W3C 提出的一种处理 XML 文档的标准接口.Qt 实现了 DO ...

  9. Qt 学习之路 2(59):使用流处理 XML

    Qt 学习之路 2(59):使用流处理 XML 豆子 2013年7月25日 Qt 学习之路 2 18条评论 本章开始我们将了解到如何使用 Qt 处理 XML 格式的文档. XML(eXtensible ...

随机推荐

  1. 09-排序2 Insert or Merge (25 分)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  2. Android MVP模式实现组件和业务逻辑分离

    1,Activity代码展示,只需要一下3行重要代码即可完成任何复杂的逻辑 /** * 登录界面 * * @author lipanquan */public class LoginActivity ...

  3. 工作中常用的linux命令(持续更新)

    一.top 实时动态地查看系统的整体运行情况1.在top命令后 > < 切换排序方式,根据cpu排名或者内存排名查看 2.top -p 进程pid 查看某一进程的整体运行情况 二.解压缩 ...

  4. error creating bean with name 'defaultvalidator' defined in class path resource

    场景: 1.直接用eclipse 运行没问题(本地用的tomcat是7.0.70): 2.打包发布到服务器运行也没问题(服务器tomcat是8.5.30): 3.将打包发布的放到本地tomcat(7. ...

  5. javasript数据类型以及如何判断数据类型

    在javascript里面一共有5种基本的数据类型,分别是:Number,String,Boolean,Null,Undefined7种引用类型,分别是:Object类型,Array类型,Date类型 ...

  6. 【Java】Java中的Collections类——Java中升级版的数据结构【转】

    一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数 ...

  7. PlayMaker Play Sound 和 Audio Play

    这两个 Action 都可以播放声音 *Play Sound:只要把声音拖进去就可以: *Audio Play:要求游戏对象要有Audio Source组件.

  8. MongoDB数据库常用操作

    推荐文章 --- 一天精通MongoDB数据库 注意: monogdb数据在使用之后必须及时 mongodb.close()否则后台崩溃. 1. 删除文档中的一个字段 db.<集合名>.u ...

  9. ecshop点击订购、加入按钮没反应的解决方法

    今天做ecshop站的时候,测试数据,发现点击订购.加入按钮都没反应,网上搜索,有些人说是修改了common.js,我将原始版本复原也没反映.后来重新安装ecshop,仔细研究发现,原来头部文件pag ...

  10. JS获取元素属性、样式getComputedStyle()和currentStyle方法兼容性问题

    1. getComputedStyle()  方法获取到的是经过计算机/浏览器计算后的样式 getComputedStyle($("#div")).width; 兼容性:IE6 7 ...