Je voudrais formater une chaîne pour le label Qt, je programme en C ++ sur Qt.
Dans ObjC je voudrais écrire quelque chose comme:
NSSsortingng *format=[NSSsortingng ssortingngWithFormat: ... ];
Comment faire quelque chose comme ça dans Qt?
Vous pouvez utiliser QSsortingng.arg comme ceci
QSsortingng my_formatted_ssortingng = QSsortingng("%1/%2-%3.txt").arg("~", "Tom", "Jane"); // You get "~/Tom-Jane.txt"
Cette méthode est préférable à sprintf car:
Changer la position de la chaîne sans avoir à modifier l’ordre de substitution, par exemple
// To get "~/Jane-Tom.txt" QSsortingng my_formatted_ssortingng = QSsortingng("%1/%3-%2.txt").arg("~", "Tom", "Jane");
Ou, changer le type des arguments ne nécessite pas de changer la chaîne de format, par exemple
// To get "~/Tom-1.txt" QSsortingng my_formatted_ssortingng = QSsortingng("%1/%2-%3.txt").arg("~", "Tom", QSsortingng::number(1));
Comme vous pouvez le voir, le changement est minime. Bien entendu, vous n’avez généralement pas besoin de vous soucier du type transmis à QSsortingng :: arg () car la plupart des types sont correctement surchargés.
Un inconvénient cependant: QSsortingng :: arg () ne gère pas std :: ssortingng. Vous devrez appeler: QSsortingng :: fromStdSsortingng () sur votre std :: ssortingng pour le transformer en QSsortingng avant de le transmettre à QSsortingng :: arg (). Essayez de séparer les classes qui utilisent QSsortingng des classes qui utilisent std :: ssortingng. Ou si vous le pouvez, passez à QSsortingng.
MISE À JOUR: 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
, mais la méthode arg
est préférable car elle prend en charge unicode.
QSsortingng str; str.sprintf("%s %d", "ssortingng", 213);
Utilisez QSsortingng::arg()
pour le même effet.