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?
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.
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);
Utilisez QString::arg()
pour le même effet.