Qtラベルの文字列を書式化したいのですが、私はQtのC++でプログラミングしています。どのようにQtの中にそのような何かをQStringをフォーマットするには?
NSString *format=[NSString stringWithFormat: ... ];
:
はにObjCで私のような何かを書くのでしょうか?
Qtラベルの文字列を書式化したいのですが、私はQtのC++でプログラミングしています。どのようにQtの中にそのような何かをQStringをフォーマットするには?
NSString *format=[NSString stringWithFormat: ... ];
:
はにObjCで私のような何かを書くのでしょうか?
同じ効果についてはQString::arg()
を使用してください。
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);
// 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のおかげで更新されています。
.arg().arg(x).arg(y).arg(z)の代わりに.arg(x、y、z)を使用してください。それはより速く、より安全です - もし文字列xが。 "%1"、yは%2の代わりに%1を置き換えます。通常は意図したものではありません。 –
順序を変更することはできますが、番号付きの引数を削除することはできないようです。たとえば、QString( "%3")。arg( "〜"、 "Tom"、 "Jane")の結果は "〜"になります。それは最初に見えたほど役に立つものではありません... – iforce2d
おそらく、しかし余分な引数をarg()に残すことは意味がありません。 sprintfでは、引数のタイプを変更すると、フォーマット文字列をさらに変更する必要があります。 –