QString::arg() настроить размер переменной и удалить пробелы

у меня есть такой кусок кода

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

person sven    schedule 17.10.2013    source источник


Ответы (2)


QString::arg() жадный: принимает до двух цифр чтобы составить идентификатор. Вот как выглядит ваш вызов для QString:

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

(Пробелы добавлены для удобства чтения.)

Таким образом, первый %n на самом деле является самым высоким (=10), и ему присваивается значение arg() minute.
Чтобы решить эту проблему, используйте двузначные счетчики:

QString("450%01015%02%03%04")
person Martin Hennings    schedule 29.02.2016

person    schedule
comment
Я получаю такой вывод 450 1% 015010.000.000.001 2 3 за день = 1, час = 2, минута = 3. Я что-то не так делаю? Я ввожу значение в qeditline - person sven; 18.10.2013
comment
это была моя ошибка, я забыл написать s после %01, но у меня все еще есть пробелы, как я могу их удалить? - person sven; 18.10.2013