2010-12-01 17 views
5

documentación QString en http://doc.qt.io/qt-5/qstring.html#arg dice¿cuál es la diferencia entre QString :: sprintf y QString :: arg en Qt?

Una ventaja de usar arg() sobre sprintf() es que el orden de los numeradas marcadores de lugar se puede cambiar, si cuerdas de la aplicación se traducidos a otros idiomas, pero cada arg() aún reemplazará el marcador del lugar sin colocar más pequeño reemplazado, sin importar dónde aparezca.

¿cuál es el significado de esto? ¿Alguien puede explicar con el ejemplo?

+1

Otra ventaja de arg(): sprintf() se [obsoleta] (http: // qt-project.org/doc/qt-4.8/qstring.html#sprintf). – jlstrecker

Respuesta

5

parece si empezamos con:

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

luego llamar a:

format.arg("something"); 

formato será ahora:

"algo:% 1% 2"

... lo que significa que puede acumular la cuerda sobre la marcha.

Cambiar el orden de los marcadores de lugar es posible a través de mecanismo de traducción de Qt, que le permite decir:

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

y añadirlo a su tabla de traducción y tienen los parámetros en un orden diferente para diferentes idiomas.

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"; 

Con traducción alemana "Das ist Datum: 1.% 2.% 3%": DateString = "Das ist Datum: 1.12.2010"

4

Una cosa que añadir a la respuesta sje397:

cuando la internacionalización de su aplicación que puede tener una cadena como esa:

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

Así que cuando se llama a

formatInAnOtherLanguage.arg("something"); 

formatInAnOtherLanguage será

"%3 something %2" 

Esa es la ventaja principal de la función arg sobre la función sprintf

Cuestiones relacionadas