QString :: arg()调整变量的大小并删除空格

时间:2013-10-17 20:57:07

标签: c++ qt qstring qtcore

我有这样的代码片

   QString day= ui->direct_pow_lineEdit_1->text();
   QString hour = ui->direct_pow_lineEdit_2->text();
   QString minute = ui->direct_pow_lineEdit_3->text();
   QString destIP = QString("010.000.000.001");
   QString data_to_transfer = QString("450%1015%2%3%4").arg(day,2).arg(destIP).arg(hour,2).arg(minute,2);

我想要的是Qt相当于sprintf(data_to_transfer, "450%02s015%s%02s%02s", day, destIP, hour, minute )但是

  QDebug deb = qDebug();
   deb << data_to_transfer;

输出

450 215 1010.000.000.001 1

如何正确修改QString,我不想删除变量之间的空格?

编辑:

空格是由于默认值,如果我定义.arg(day,2,'0'),那么它将填充0而不是空格。但是,如果没有空格,则不能正确编辑QString。例如

`QString data_to_transfer = QString("450%1015%2").arg(day, 2, '0').arg(destIP, 2, '0');` 

输出“450010.000.000.0011531”,其中一天是31

SOLUTION:

这个解决了我的问题,但我希望看到更好的解决方案。

QString data_to_transfer = QString("450%1").arg(day,2,'0');
data_to_transfer.append("015");
data_to_transfer.append(destIP);
data_to_transfer.append(QString("%1").arg(hour,2,'0'));
data_to_transfer.append(QString("%1").arg(minute,2,'0'));

2 个答案:

答案 0 :(得分:0)

QString data_to_transfer = QString().sprintf("450%02s%015%s%02s%02s",
day.toUtf8().constData(),
destIP.toUtf8().constData(),
hour.toUtf8().constData(),
minute.toUtf8().constData());

答案 1 :(得分:0)

QString::arg() is greedy:最多需要两位数才能构成ID。这就是你的调用对QString的看法:

  

QString(“450 %10 15 %2 %3 %4 ”)

(为了便于阅读,添加了空格。)

所以第一个%n实际上是最高的(= 10),并被赋予minute的arg()值。
要解决这个问题,请使用两位数的计数器:

QString("450%01015%02%03%04")