2016-02-19 20 views
5

文字列に.arg()を使いたいです。これは一例である。QString :: arg()と数字の後ろのプレースホルダー

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

Iが出力66177を取得したいと思いますが、もちろん、これは%11代わりにリテラル1が続くプレースホルダ#1のプレースホルダ#11として解釈されるので、実際の出力されません。

次のより優れた解決策がありますか?

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インデックスを使用する必要はありません。したがって、1桁の数字の代わりに2桁の数字を使用できます。

これを試してみて、何が起こるかを参照してください。これはあなたが結果を期待与えるべき

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

(私はそれがQT 5.4でテストをしましたし、それが完璧に動作します)。

私も質問の下に溶液形態のコメントをテストしてみた、それが動作します。

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

良い解決策。しかし、読みにくいです。コードコメントが確実に必要です。 – Silicomancer

1

arg()の感覚は、それはあなたが%11を持つべきではない理由である%1から%99にすべてを交換していることです。これを回避するにはいくつかの方法があります。

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

それともあなたが持つことができます:

あなたの方法は、同様に、あなたのコード内で1として一定の先に持つことができるようで結構です

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

に指定されたようQString::numberがあまりにもokです使い方コメント。

1

次のいずれかの方法を試してみてください。

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

高度な数値書式が必要です(QString :: numberでは使用できません)。これは確かに標準的なケースの代替手段です。 – Silicomancer

+0

マレックのソリューションは確かにユニバーサルなものです*** ***脳腫瘍***に突っ込みます。 – Murphy

関連する問題