Здравствуйте. Есть объект типа QString, в котором записана utf-8 строка с форматом, который используется в функции (s)printf (скажем, есть %d и %s, без всяких спецификаторов). Как правильно подставить в такую строку аргументы?
Пробовал варианты через sprintf() с последующим преобразованием в QString, но это крашит программу в момент вызова sprintf() (как и использование QString::sprintf(), но там еще и нельзя формат подавать в utf-8):
C++ (Qt)
QString formatString;
const char *format = formatString.toUtf8().constData();
char *buf = new char[qstrlen(format)];
sprintf(buf, format, ...);
formatString = QString::fromUtf8(buf);
delete [] buf;
C++ (Qt)
QString formatString;
QByteArray ba = formatString.toUtf8();
sprintf(formatString.toUtf8().data(), ba.constData(), ...);
Еще приходил в голову костыль с использованием QRegExp("%\\w"), но пока что остановился на таком:
C++ (Qt)
QString formatString;
// не учитываем возможность '%' быть последним символом и того, что аргументов может быть более 9
for (int i = 0, k = 1; i < prop.descPositive.length(); ++i)
if (formatString.at(i) == '%' && formatString.at(i + 1).isLetter())
formatString[++i] = QString::number(k++).at(0);
formatString = formatString.replace("%%", "%").arg(...);