Comment traiter "%1 " dans L'argument de QString::arg()?
tout le monde aime
QString("Put something here %1 and here %2")
.arg(replacement1)
.arg(replacement2);
mais les choses se démangeaisons dès que vous avez la moindre chance que replacement1
contient en fait %1
ou encore %2
n'importe où. Ensuite, le deuxième QString::arg()
ne remplacera que le%1
ou les deux %2
occurrences. De toute façon, vous n'obtiendrez pas le littéral "%1"
que vous avez probablement prévu.
y a-t-il une astuce standard pour surmonter cela?
Si vous avez besoin d'un exemple pour jouer avec, prendre ce
#include <QCoreApplication>
#include <QDebug>
int main()
{
qDebug() << QString("%1-%2").arg("%1").arg("foo");
return 0;
}
sortie
"foo-%2"
au lieu de
"%1-foo"
comme on pouvait s'y attendre (pas).
qDebug() << QString("%1-%2").arg("%2").arg("foo");
donne
"foo-foo"
et
qDebug() << QString("%1-%2").arg("%3").arg("foo");
donne
"%3-foo"
3 réponses
Voir la Qt docs sur QString:: arg ():
QString str;
str = "%1 %2";
str.arg("%1f", "Hello"); // returns "%1f Hello"
notez que le arg()
surcharge pour les arguments multiples ne prend QString. Dans le cas où tous les arguments ne sont pas des QStrings, vous pouvez changer l'ordre des placeholders dans la chaîne de format:
QString("1%1 2%2 3%3 4%4").arg(int1).arg(string2).arg(string3).arg(int4);
devient
QString("1%1 2%3 3%4 4%2").arg(int1).arg(int4).arg(string2, string3);
de Cette façon, tout ce qui n'est pas une chaîne est remplacé d'abord, et ensuite toutes les cordes sont remplacées en même temps.
Vous devriez essayer d'utiliser
QString("%1-%2").arg("%2","foo");