QString之arg使用一则(QTBUG19027)
2011-05-19 20:53
351 查看
首先声明,个人不认为这是一个bug(它处于reported阶段,官方也没确认它是或不是bug)。考虑到其他人可能有类似的疑问,故整理一下:
是这样一个问题:
交换两个arg的同时交换%1%2的位置,得到的结果不同
示例程序如下:
结果如下:
这个结果很正常。我们稍候分析。但是,你有没有和他一样的疑问呢?
前者为什么不是“-0001”
这是bug还是feature
必须按照 %1 %2 的次序么?
注意这儿提到了两点:
%后面的数字的范围:1-99
arg用它的参数取代字符串中%和最小的数字
的组合
首先:用"0001" 取代 %1
然后,用 "-" 取代 %20
有疑问?为什么不是%2或%200?
范围是1-99,所以不可能是200
为什么不是2?自己想想下面的情况
问题
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")
相关文章推荐
- QString之arg使用一则(QTBUG19027)
- QString的arg方法的使用(Qt)
- [Qt] 使用arg()从double转换到QString的Bug?
- QT中QString 类的使用
- QtInternal 之 高效使用QString
- QT学习之QString的arg方法
- qt中如何由Double类型变为QString类型以及chop()的使用
- QT学习之QString的arg方法
- QT学习之QString的arg方法
- Qt 中的QString和QByteArray 使用
- QtInternal 之 高效使用QString(使用QLatin1String,QStringRef,QStringBuilder,QStringMatcher等相关类)
- 解决Linux下Qt程序报『QString::arg: Argument missing: 无法解析SSLv2_client_method中的符号』错误
- QT中QString 格式化 arg前面自动补0
- QT学习之QString的arg方法
- QT学习之QString的arg方法
- QT中QString 类的使用--获取指定字符位置、截取子字符串等
- Lomper 每天进步一点点~~ QT学习之QString的arg方法
- QtInternal 之 高效使用QString
- QT——设置窗口的固定大小、QProcess、定时器事件、QString::arg、系统时间、QPixmap 和 QImage 区别
- QT中QString 类的使用--获取指定字符位置、截取子字符串等