web-dev-qa-db-ja.com

QStringをフォーマットする方法は?

Qtラベルの文字列をフォーマットしたいのですが、QtでC++でプログラミングしています。

ObjCでは、次のように書きます。

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

Qtでそのようなことをする方法は?

70

このように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のおかげで更新されます。

149
Dat Chu

sprintfメソッドを使用できますが、Unicodeをサポートするため、argメソッドが推奨されます。

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

同じ効果を得るには QString::arg() を使用します。

4
Stephen Chu