La façon de traiter avec “%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 même %2 n'importe où. Ensuite, la deuxième QString::arg() permettra de ne remplacer que la ré-introduit %1 ou les deux %2 occurrences. De toute façon, vous n'aurez pas le littéral "%1" que vous avez probablement prévu.

Est-il un truc standard pour surmonter cela?

Si vous avez besoin d'un exemple pour jouer avec, profiter de cette

#include <QCoreApplication>
#include <QDebug>

int main()
{
    qDebug() << QString("%1-%2").arg("%1").arg("foo");
    return 0;
}

Ce sera de sortie

"foo-%2"

au lieu de

"%1-foo"

que l'on pourrait attendre (ou pas).

    qDebug() << QString("%1-%2").arg("%2").arg("foo");

donne

"foo-foo"

et

    qDebug() << QString("%1-%2").arg("%3").arg("foo");

donne

"%3-foo"
  • Je sais, je pourrais utiliser la concaténation de chaîne à l'aide de operator + () mais dans certains endroits, par exemple, la traduction en utilisant tr(), on a envie de garder la possibilité de modifier l'ordre des arguments dans le modèle.
  • Wow! Je n'ai jamais rencontré ce cas, mais si une traduction est la chaîne de caractères "%1" (par opposition à 1%, par exemple), alors il ne fonctionne pas à tous. Ce n'est vraiment pas de bon sens. On dirait qu'ils réappliquer les arguments pour le résultat de plus de et plus.
  • N'était-il pas la possibilité de pseudo-escape "%1" par écrit "%%1"? Encore la fonctionnalité de l'utilisation d'un pour cent-marqueur dans un arg-call est bon. Imaginez que vous avez une erreur standard de la chaîne à l'aide de %1 pour remplacer le "où" et %2 pour remplacer le "quoi" - maintenant, dans certains cas, il vous suffit de remplacer "où" avec une chaîne de caractères, dans d'autres, vous avez envie d'un nombre. Dans le cas de la chaîne que vous seriez peut-être voulez mettre des apostrophes autour d'elle, dans le cas d'un certain nombre d'un hashtag en avant serait bon d'en améliorer la lisibilité. Maintenant, vous pouvez utiliser le 1er arg-de remplacer les %1 avec f.e. "#%3" et une 3ème arg-appel à insérer le nombre.
InformationsquelleAutor Tilman Vogel | 2011-03-09