Comment formater un QSsortingng?

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.