qt - ¿Cómo lidiar con "% 1" en el argumento de QString:: arg()?
string-formatting placeholder (3)
Todo el mundo ama
QString("Put something here %1 and here %2")
.arg(replacement1)
.arg(replacement2);
pero las cosas pican tan pronto como tiene la menor posibilidad de que el replacement1
%1
contenga %1
o incluso %2
cualquier lugar. Luego, la segunda QString::arg()
reemplazará solo las ocurrencias %1
reintroducidas o ambas %2
. De todos modos, no obtendrás el literal "%1"
que probablemente pretendías.
¿Hay algún truco estándar para superar esto?
Si necesitas un ejemplo para jugar, toma esto
#include <QCoreApplication>
#include <QDebug>
int main()
{
qDebug() << QString("%1-%2").arg("%1").arg("foo");
return 0;
}
Esto dará salida
"foo-%2"
en lugar de
"%1-foo"
como podría esperarse (no).
qDebug() << QString("%1-%2").arg("%2").arg("foo");
da
"foo-foo"
y
qDebug() << QString("%1-%2").arg("%3").arg("foo");
da
"%3-foo"
Deberías intentar usar
QString("%1-%2").arg("%2","foo");
Tenga en cuenta que la sobrecarga de arg()
para múltiples argumentos solo toma QString. En caso de que no todos los argumentos sean QStrings, podría cambiar el orden de los marcadores de posición en la cadena de formato:
QString("1%1 2%2 3%3 4%4").arg(int1).arg(string2).arg(string3).arg(int4);
se convierte en
QString("1%1 2%3 3%4 4%2").arg(int1).arg(int4).arg(string2, string3);
De esa manera, todo lo que no es una cadena se reemplaza primero, y luego todas las cadenas se reemplazan al mismo tiempo.
Ver los documentos Qt sobre QString::arg() :
QString str;
str = "%1 %2";
str.arg("%1f", "Hello"); // returns "%1f Hello"