Ich möchte einen String für das Qt-Label formatieren, ich programmiere in C ++ auf Qt.
In ObjC würde ich so etwas schreiben wie:
NSString *format=[NSString stringWithFormat: ... ];
Wie macht man so etwas in Qt?
Ich möchte einen String für das Qt-Label formatieren, ich programmiere in C ++ auf Qt.
In ObjC würde ich so etwas schreiben wie:
NSString *format=[NSString stringWithFormat: ... ];
Wie macht man so etwas in Qt?
Antworten:
Sie können QString.arg wie folgt verwenden
QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", "Jane");
// You get "~/Tom-Jane.txt"
Diese Methode wird Sprintf vorgezogen, weil:
Ändern der Position des Strings, ohne die Reihenfolge der Substitution ändern zu müssen, z
// To get "~/Jane-Tom.txt"
QString my_formatted_string = QString("%1/%3-%2.txt").arg("~", "Tom", "Jane");
Zum Ändern des Argumenttyps muss die Formatzeichenfolge nicht geändert werden, z
// To get "~/Tom-1.txt"
QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", QString::number(1));
Wie Sie sehen können, ist die Änderung minimal. Natürlich müssen Sie sich im Allgemeinen nicht um den Typ kümmern, der an QString :: arg () übergeben wird, da die meisten Typen korrekt überladen sind.
Ein Nachteil: QString :: arg () behandelt std :: string nicht. Sie müssen Folgendes aufrufen: QString :: fromStdString () in Ihrem std :: string, um daraus einen QString zu machen, bevor Sie ihn an QString :: arg () übergeben. Versuchen Sie, die Klassen, die QString verwenden, von den Klassen zu trennen, die std :: string verwenden. Oder wenn Sie können, wechseln Sie ganz zu QString.
UPDATE: Beispiele werden dank Frank Osterfeld aktualisiert.
UPDATE: Beispiele werden dank alexisdm aktualisiert.
.arg("~", "Tom", 1)
funktioniert nicht. Sie müssen das numerische Argument separat ersetzen: .arg("~", "Tom").arg(1)
oder es zuerst in eine Zeichenfolge konvertieren : .arg("~", "Tom", QString::number(1))
.
QString("%1 %1 blah blah %1").arg("Tom")
?
Verwenden Sie QString::arg()
für den gleichen Effekt.