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 utilisanttr()
, 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.
Vous devez vous connecter pour publier un commentaire.
Voir le Qt docs sur QString::arg():
QString::arg()
, par exemple pour les nombres ainsi? À l'aide deQString::number()
dans le multi-QString-arg()
n'est pas la même chose qu'il ne vous donne pas la possibilité de spécifier la largeur de champ.QString::leftJustified()
ouQString::rightJustified()
, mais cela devient long. Je pense avoir un automatiquement échapper à la version dearg()
serait génial.QString("00000023-%2")
au lieu deQString("%1-00000023")
.Noter que le
arg()
surcharge pour de multiples arguments ne prend QString. Dans le cas de ne pas tous les arguments sont QStrings, vous pouvez modifier l'ordre des espaces réservés dans la chaîne de format:devient
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 devez essayer d'utiliser le