问题描述
我需要用QString输出一个固定位数的数字字符串。起初我的代码是这样:
int img_num = 1
auto new_name = QString("%1.png").arg((int)img_num, 3, 10, '0'); //最后一个参数用u'0'也是一样的
qDebug() << "new_name:" << new_name;
但是输出却是:
new_name: "1.000000000000000000000000000000000000000000000000.png"
最终有效的代码:
auto new_name = QString("%1.png").arg((int)img_num, 3, 10, QLatin1Char('0')); //修改的是最后一个参数
或者
auto new_name = QString("%1.png").arg((int)img_num, 3, 10, QChar('0')); //修改的是最后一个参数
输出效果
new_name: "001.png"
原因分析
QString.arg的原型函数是:
QString QString::arg(int a, int fieldWidth = 0, int base = 10, QChar fillChar = u' ') const
最后一个参数是QChar,这是一个16位的字符类型,并不是c++中的char。所以需要转换一下。
参考资料
QString格式化的几种用法:补零/进制转换/保留小数位等