2016-02-19 1171 views
5

我想在字符串上使用.arg()。這是一個例子:QString :: arg()佔位符後的數字

qDebug() << QString("%11%2").arg(66).arg(77); 

我想獲得輸出66177,但當然這不是因爲%11實際輸出被解釋爲佔位符#11,而不是佔位符#1後面文字1。

有沒有比以下更好的解決方案?

qDebug() << QString("%1%2%3").arg(66).arg(1).arg(77); 
+2

'qDebug()<< QString的( 「%011%02」)ARG(66).arg(77 );' – Meefte

回答

1

arg%後替換最低值序列。範圍必須介於1和99之間。 因此,您不必使用1索引,您可以使用兩位數字代替一位數字。

試試這個,看看會發生什麼:

qDebug() << QString("%111%22").arg(66).arg(77); 

這應該給您預期的結果(我已經測試對QT 5.4和它完美的作品)。

我也問題下測試解決方案的形式註釋,它的工作原理:

qDebug() << QString("%011%02").arg(66).arg(77); 
+0

好的解決方案。但有點難以閱讀。最終需要代碼評論。 – Silicomancer

1

arg()的感覺是,它是由%1更換到%99一切,這就是爲什麼你不應該有%11。有幾種方法可以逃避這一點。

你的方式是罰款,以及你可以有1恆定早些時候在你的代碼:

qDebug() << QString("%1%2%3").arg(66).arg(1).arg(77); 

或者你可以有:

qDebug() << QString("%1").arg(66) + "1" + QString("%1").arg(77); 

使用QString::number是確定太在指定評論。

1

嘗試以下方法之一:

  • QString::number(66) + "1" + QString::number(77)
  • QString("%1 1 %2").arg(66).arg(77).replace(" ", "")
+0

我將需要高級數字格式(不能使用QString :: number)。不過這肯定是標準案例的替代方案。 – Silicomancer

+0

馬立克的解決方案肯定是普遍的解決方案*** ***。 – Murphy