Qtラベルの文字列をフォーマットしたいのですが、QtでC++でプログラミングしています。
ObjCでは、次のように書きます。
NSString *format=[NSString stringWithFormat: ... ];
Qtでそのようなことをする方法は?
このようにQString.argを使用できます
QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", "Jane");
// You get "~/Tom-Jane.txt"
この方法は、sprintfよりも優先されます。
置換の順序を変更せずに文字列の位置を変更します。
// 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を処理しません。 QString :: arg()に渡す前に、std :: stringでQString :: fromStdString()を呼び出してQStringにする必要があります。 QStringを使用するクラスとstd :: stringを使用するクラスを分離してみてください。または、可能であれば、QStringに完全に切り替えます。
更新:Frank Osterfeldのおかげで例が更新されました。
更新:例はalexisdmのおかげで更新されます。
sprintf
メソッドを使用できますが、Unicodeをサポートするため、arg
メソッドが推奨されます。
QString str;
str.sprintf("%s %d", "string", 213);
同じ効果を得るには QString::arg()
を使用します。