1

我有这样的代码片

   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 天

解决方案:

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

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'));
4

2 回答 2

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());
于 2013-10-17T22:05:31.333 回答
0

QString::arg() 是贪婪的:最多需要两位数来组成 id。这就是您对 QString 的调用:

QString("450 %10 15 %2 %3 %4 ")

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

所以第一个 %n 实际上是最高的 (=10) 并被分配了 arg() 的值minute
要克服这个问题,请使用两位数计数器:

QString("450%01015%02%03%04")
于 2016-02-29T16:34:34.827 回答