2011-01-24 6 views
59

Qtラベルの文字列を書式化したいのですが、私はQtのC++でプログラミングしています。どのようにQtの中にそのような何かをQStringをフォーマットするには?

NSString *format=[NSString stringWithFormat: ... ]; 

はにObjCで

私のような何かを書くのでしょうか?

答えて

3

同じ効果についてはQString::arg()を使用してください。

24

sprintfメソッドを使用できますが、ユニコードをサポートするのでargメソッドが優先されます。例えば、

は、置換の順序を変更することなく、文字列の位置を変更する:あなたはので、このメソッドはsprintfのより好ましいこの

QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", "Jane"); 
// You get "~/Tom-Jane.txt" 

ようQString.argを使用することができます

QString str; 
str.sprintf("%s %d", "string", 213); 
125

// To get "~/Jane-Tom.txt" 
QString my_formatted_string = QString("%1/%3-%2.txt").arg("~", "Tom", "Jane"); 

また、引数のタイプを変更する場合でも、フォーマット文字列を変更する必要はありません。

// To get "~/Tom-1.txt" 
QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", QString::number(1)); 

ご覧のとおり、変更は最小限です。もちろん、ほとんどの型は正しくオーバーロードされているので、QString :: arg()に渡される型を気にする必要はありません。

ただし、QString :: arg()はstd :: stringを処理しません。 std :: stringのQString :: fromStdString()を呼び出して、QString :: arg()に渡す前にそれをQStringにする必要があります。 QStringを使用するクラスをstd :: stringを使用するクラスから分離してください。そうであれば、QStringに切り替えてください。

更新:Frank Osterfeldのおかげで更新例が更新されました。

更新:例はalexisdmのおかげで更新されています。

+17

.arg().arg(x).arg(y).arg(z)の代わりに.arg(x、y、z)を使用してください。それはより速く、より安全です - もし文字列xが。 "%1"、yは%2の代わりに%1を置き換えます。通常は意図したものではありません。 –

+3

順序を変更することはできますが、番号付きの引数を削除することはできないようです。たとえば、QString( "%3")。arg( "〜"、 "Tom"、 "Jane")の結果は "〜"になります。それは最初に見えたほど役に立つものではありません... – iforce2d

+0

おそらく、しかし余分な引数をarg()に残すことは意味がありません。 sprintfでは、引数のタイプを変更すると、フォーマット文字列をさらに変更する必要があります。 –

関連する問題