zoukankan      html  css  js  c++  java
  • QT学习之QString的arg方法

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

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





  • 相关阅读:
    uva11916 Emoogle Grid (BSGS)
    2016vijos 1-2 股神小L(堆)
    bzoj千题计划311:bzoj5017: [Snoi2017]炸弹(线段树优化tarjan构图)
    Oracle Profile 使用详解--zhuanzai
    通过srvctl add命令添加database信息到srvctl管理器-转
    Oracle Dataguard Standby Redo Log的两个实验
    MySQL数据的主从复制、半同步复制和主主复制详解-转
    解决oralce 11g dg搭建报错:ORA-16664、ORA-16714、ORA-16810问题--转
    oracle分布式事务总结-转载
    日志挖掘Logmnr
  • 原文地址:https://www.cnblogs.com/lomper/p/4135387.html
Copyright © 2011-2022 走看看