Ответ 1
См. документы Qt о QString:: arg():
QString str;
str = "%1 %2";
str.arg("%1f", "Hello"); // returns "%1f Hello"
Все любят
QString("Put something here %1 and here %2")
.arg(replacement1)
.arg(replacement2);
но все становится мутным, как только у вас есть небольшая вероятность, что replacement1
на самом деле содержит %1
или даже %2
где угодно. Затем второй QString::arg()
заменит только повторно введенные %1
или оба события %2
. Во всяком случае, вы не получите буквальный "%1"
, который вы, вероятно, запланировали.
Есть ли какой-либо стандартный трюк, чтобы преодолеть это?
Если вам нужен пример для игры, возьмите это
#include <QCoreApplication>
#include <QDebug>
int main()
{
qDebug() << QString("%1-%2").arg("%1").arg("foo");
return 0;
}
Это приведет к выводу
"foo-%2"
вместо
"%1-foo"
как и следовало ожидать (не).
qDebug() << QString("%1-%2").arg("%2").arg("foo");
дает
"foo-foo"
и
qDebug() << QString("%1-%2").arg("%3").arg("foo");
дает
"%3-foo"
См. документы Qt о QString:: arg():
QString str;
str = "%1 %2";
str.arg("%1f", "Hello"); // returns "%1f Hello"
Вам следует попробовать использовать
QString("%1-%2").arg("%2","foo");
Обратите внимание, что перегрузка arg()
для нескольких аргументов принимает только QString. Если не все аргументы QStrings, вы можете изменить порядок заполнителей в строке формата:
QString("1%1 2%2 3%3 4%4").arg(int1).arg(string2).arg(string3).arg(int4);
становится
QString("1%1 2%3 3%4 4%2").arg(int1).arg(int4).arg(string2, string3);
Таким образом, все, что не является строкой, сначала заменяется, а затем все строки заменяются в одно и то же время.