首页 > 其他分享 >QT--QString的arg方法

QT--QString的arg方法

时间:2023-10-12 12:25:43浏览次数:31  
标签:输出 const QT -- QString str arg Hello

在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 &类型,即:

QString QString::arg(const QString & a1, const QString & a2, const QString & a3) const

同时,arg( )里的参数实现从1个到9个,也就是说最多只能有9个!即在实现中,arg的定义中参数最多的为:

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

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

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 2 3 4 5 6 7 8 9 %10 %11"

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

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帮助文档中,给出了如下代码:

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)

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

QString str=QString("%1 %2 %3 %4").arg("A").arg("B").arg("C").arg("D");
//str=="A B C D"

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

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( )会同样替换!

请注意下列例子:

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】为:

QString QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char( ' ' )) const

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

如下列:

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时,原型为:

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数字。如:

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"

 

标签:输出,const,QT,--,QString,str,arg,Hello
From: https://www.cnblogs.com/zzzsj/p/17759215.html

相关文章

  • JAVA
    1.JVM相关对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资深开发者来说,不会JVM几乎是不可接受的。JVM作为java运行的基础,很难相信对于JVM一点都不了解的人可以把java语言吃得很透。我在面......
  • 【FTP】FlashFXP 530 Non-anonymous ... 连接失败(连接已被客户端关闭)
    参考的这个图: ......
  • HelloWorld
    publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println("Hello,World!");//单行注释//输出一个Hello,World!//有趣的代码注释//多行注释:可注释一段文字/*注释*//*我是多......
  • Demo03
    publicclassDemo03{publicstaticvoidmain(String[]args){//整数拓展进制二进制0b十进制八进制0十六进制0xinti=10;inti2=010;//八进制0inti3=0x10;//十六进制0xSystem.out.pr......
  • Linux快捷键及History用法
    Linux快捷键及History用法1.bash的快捷键Ctrl+l清屏,相当于clear命令Ctrl+o执行当前命令,并重新显示本命令Ctrl+s阻止屏幕输出,锁定Ctrl+q允许屏幕输出,解锁Ctrl+c终止命令Ctrl+z挂起命令Ctrl+a光标移到命令行首,相当于HomeCtrl+e光标移到命令......
  • Deom02基本数据类型
    publicclassDeom02{publicstaticvoidmain(String[]args){//八大基本数据类型//整数intnum1=10;//最常用bytenum2=20;shortnum3=30;longnum4=40L;//Long类型要在数字后加L//小数:浮点数......
  • Demo01
    publicclassDemo01{publicstaticvoidmain(String[]args){String王者荣耀="最强王者";System.out.println(王者荣耀);StringAhello="景一宸";Stringhello="景一宸";String$hello="景一宸&quo......
  • Linux 中awk命令根据索引文件批量提取列和行
     001、批量提取列,根据索引index.txt文件批量提取2、4、8、9列[root@pc1test2]#lsa.txtindex.txt[root@pc1test2]#cata.txt##测试文件00100200300400500600700800901001101201301401501601701801902002102202302402502602......
  • 造轮子之属性注入配合懒加载构建服务抽象基类
    在前面实现管理API的时候,可以看到我们用的挺多功能是没有通过构造函数注入的。比如缓存DistributedCache,MemoryCache,对象映射Mapper,多语言L,当前用户CurrentUser等等。这些全都初始化在WheelServiceBase以及WheelControllerBase中,可以通过属性注入完成这个操作,同时为了避免注入太多......
  • 智能充电未来之路:ISO 15118-20的关键角色
    随着越来越多的电动汽车进入到大众的视野,对电动汽车的充电技术要求也变得越来越高,在ISO15118协议中表明,电动汽车可以使用智能充电的方式进行充电,可以大大提高充电效率。  ISO15118  ISO15118是一项国际标准,定义了电动汽车和充电桩之间的通信协议,这项标准包括了车辆与......