2013-10-17 56 views
1

我有這樣的代碼片的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); 

我想haveis 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
QString data_to_transfer = QString().sprintf("450%02s%015%s%02s%02s", 
day.toUtf8().constData(), 
destIP.toUtf8().constData(), 
hour.toUtf8().constData(), 
minute.toUtf8().constData()); 
+0

我得到這樣的輸出450 1%015010.000.000.001 2 3天= 1小時= 2,分= 3時許我做錯了什麼?我在qeditline上輸入了值 – sven

+0

這是我的錯誤,我忘了在%01之後寫s,但是我仍然有空格,我該如何刪除它們? – sven

0

QString::arg() is greedy:最多需要兩個數字組成的ID。這是你的電話的樣子到QString的:

的QString( 「450 %10 %2%3%4」)

(空間增加了可讀性)

所以第一個%n實際上是最高的(= 10)並且被賦予了minute的arg()值。
爲了克服這個問題,使用兩個數字計數器:

QString("450%01015%02%03%04") 
相關問題