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"

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





  • 相关阅读:
    手机号码正则表达式
    POJ 3233 Matrix Power Series 矩阵快速幂
    UVA 11468
    UVA 1449
    HDU 2896 病毒侵袭 AC自动机
    HDU 3065 病毒侵袭持续中 AC自动机
    HDU 2222 Keywords Search AC自动机
    POJ 3461 Oulipo KMP模板题
    POJ 1226 Substrings KMP
    UVA 1455 Kingdom 线段树+并查集
  • 原文地址:https://www.cnblogs.com/lomper/p/4135387.html
Copyright © 2011-2022 走看看