2010-12-01 11 views
5

QString Dokumentation in http://doc.qt.io/qt-5/qstring.html#arg sagtWas ist der Unterschied zwischen QString :: sprintf und QString :: arg in Qt?

Ein Vorteil arg mit() über sprintf() ist, dass die Reihenfolge der nummerierte Platzmarkierungen ändern können, wenn die Saiten der Anwendung sind in andere Sprachen übersetzt, aber jeder arg() wird immer noch ersetzen die niedrigste Nummer nicht ersetzte Stelle Marker, egal wo es erscheint.

was bedeutet das? kann mir bitte jemand mit beispiel erklären?

+1

Ein weiterer Vorteil der ARG(): sprintf() wird [veraltet] (http: // qt-project.org/doc/qt-4.8/qstring.html#sprintf). – jlstrecker

Antwort

5

Sagen wir beginnen mit:

QString format("%1: %2 %3); 

Dann rufen:

format.arg("something"); 

Format wird nun sein:

"etwas:% 1% 2"

... was bedeutet, dass Sie sich aufbauen können die Schnur wie du gehst.

die Reihenfolge der Platzmarkierungen zu ändern ist möglich durch Übersetzungsmechanismus von Qt, die Ihnen erlaubt zu sagen:

format = tr("Hi, %1, I hope you are %2"); 

und fügen Sie sich die Übersetzungstabelle und haben die Parameter in einer anderen Reihenfolge für verschiedene Sprachen.

5
int day = 1; 
int month = 12; 
int year = 2010; 
QString dateString = QString(tr("date is %1/%2/%3")).arg(month).arg(day).arg(year); 
// dateString == "date is 12/1/2010"; 

mit deutscher Übersetzung "Das Datum ist:% 2.% 1% 3": datestring = "Das Datum ist: 1.12.2010"

4

Eine Sache zu sje397 Antwort hinzuzufügen:

wenn Ihre Anwendung zu internationalisieren können Sie eine Zeichenfolge wie die haben:

QString formatInAnOtherLanguage("%3 %1 %2"); 

Also wenn Sie anrufen

formatInAnOtherLanguage.arg("something"); 

formatInAnOtherLanguage wird

"%3 something %2" 

, dass der Hauptvorteil der arg Funktion über die Funktion sprintf