web-dev-qa-db-fra.com

Comment formater une QString?

Je voudrais formater une chaîne pour le label Qt, je programme en C++ sur Qt.

Dans ObjC, j'écrirais quelque chose comme:

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

Comment faire quelque chose comme ça en Qt?

70
hubert poduszczak

Vous pouvez utiliser QString.arg comme ceci

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

Cette méthode est préférable à sprintf car:

Modifier la position de la chaîne sans avoir à modifier l'ordre de la substitution, par ex.

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

Ou bien, changer le type des arguments ne nécessite pas de changer la chaîne de format, par ex.

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

Comme vous pouvez le constater, le changement est minime. Bien sûr, vous n'avez généralement pas besoin de vous soucier du type transmis à QString :: arg () car la plupart des types sont correctement surchargés.

Un inconvénient cependant: QString :: arg () ne gère pas std :: string. Vous devrez appeler: QString :: fromStdString () sur votre std :: string pour en faire un QString avant de le transmettre à QString :: arg (). Essayez de séparer les classes qui utilisent QString des classes qui utilisent std :: string. Ou, si vous le pouvez, basculez complètement vers QString.

UPDATE: Les exemples sont mis à jour grâce à Frank Osterfeld.

UPDATE: Les exemples sont mis à jour grâce à alexisdm.

149
Dat Chu

Vous pouvez utiliser la méthode sprintf. Toutefois, la méthode arg est privilégiée car elle prend en charge l’unicode.

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

Utilisez QString::arg() pour le même effet.

4
Stephen Chu