您的位置:首页 > 编程语言 > Qt开发

QString之arg使用一则(QTBUG19027)

2015-05-29 18:26 393 查看
文章转载http://blog.csdn.net/dbzhang800/article/details/6433061

首先声明,个人不认为这是一个bug(它处于reported阶段,官方也没确认它是或不是bug)。考虑到其他人可能有类似的疑问,故整理一下:


问题

QTBUG-19027 是这样一个问题:

交换两个arg的同时交换%1%2的位置,得到的结果不同

示例程序如下:
#include <QString>
#include <QDebug>

int main(int argc, char *argv[])
{
QString output1 = QString("%2%1").arg("0001").arg("-");
QString output2 = QString("%1%2").arg("-").arg("0001");
qDebug()<<output1<<output2;
return 0;
}


结果如下:
"-001" "-0001"


这个结果很正常。我们稍候分析。但是,你有没有和他一样的疑问呢?

前者为什么不是“-0001”
这是bug还是feature
必须按照 %1 %2 的次序么?


分析

既然用QString的成员函数 arg ,首先看Manual(我们只看重载的函数的一个)吧:
QString QString::arg ( const QString & a, int fieldWidth = 0, const QChar & fillChar = QLatin1Char( ' ' ) ) const

Returns a copy of this string with the lowest numbered place marker replaced by string a, i.e., %1, %2, ..., %99.


注意这儿提到了两点:

%后面的数字的范围:1-99

arg用它的参数取代字符串中%和最小的数字 的组合

首先:用"0001" 取代 %1
QString("%2%1").arg("0001") ==> QString("%20001")


然后,用 "-" 取代 %20
QString("%20001").arg("-") ==> QString("-001")


有疑问?为什么不是%2或%200?

范围是1-99,所以不可能是200
为什么不是2?自己想想下面的情况

QString("%1%2%3%4"
...
"%19%20%21"
)
.arg("str1")
.arg("str2")
...
.arg("str21")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: