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"
18
demandé sur Tilman Vogel 2011-03-09 20:19:46

3 réponses

Voir la Qt docs sur QString:: arg ():

QString str;
str = "%1 %2";
str.arg("%1f", "Hello"); // returns "%1f Hello"
18
répondu Johnny 2017-09-15 07:37:31

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.

3
répondu Andreas Haferburg 2017-09-15 07:10:45

Vous devriez essayer d'utiliser

QString("%1-%2").arg("%2","foo");
2
répondu user2665241 2015-07-08 04:26:41