我有这样的代码片
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'));
答案 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")