QString парсинг элементов из списка - PullRequest
1 голос
/ 05 марта 2020

У меня есть QString, отформатированный так: "Test %1 and test %2". У меня есть отдельная переменная QVariantList. Теперь я хотел бы создать новый QString и проанализировать все элементы % с элементами в моем QVariantList в порядке списка. Есть ли способ сделать это в Qt, используя объект QString?

Я надеюсь, что нет необходимости делать один arg() рекурсивный вызов вручную, поскольку это было бы очень неэффективно.

РЕДАКТИРОВАТЬ: например: My QVariantList состоит из 2 элементов: 10 (int) и 3.14 (double). Конечная строка должна выглядеть следующим образом:

"Test %1 and test %2" становится "Test 10 and test 3.14". От руки это будет сделано так:

QString str = "Test %1 and test %2";
QVariantList vl { 10, 3.14 };
QString newStr = QString(str).arg(vl[0].toString()).arg(vl[1].toString());

Ответы [ 2 ]

2 голосов
/ 05 марта 2020

Я бы решил эту проблему следующим образом:

QString str = "Test %1 and test %2";
QVariantList vl{ 10, 3.14 };

QString newStr = str;
// Assume that the QVariantList's size corresponds to the number of placeholder.
for (const auto &v : vl) {
    newStr = newStr.arg(v.toString());
}
0 голосов
/ 05 марта 2020

Можете ли вы использовать .replace()? Я не уверен, что это более эффективно, чем рекурсивный .arg(). Вы должны профилировать его, чтобы быть уверенным.

QString str = "Test %1 and test %2";
QVariantList vl { 10, 3.14 };

QString newStr = str;
for (int i=0; i<vl.size(); ++i)
{
    QString idx = "%" + QString::number(i+1);
    newStr.replace(idx,vl[i].toString());
}
std::cout<< newStr.toStdString() <<std::endl;

Результат:

Test 10 and test 3.14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...