Russian Qt Forum
Май 03, 2024, 13:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: преобразовать printf-like формат в QString-like  (Прочитано 4999 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« : Август 16, 2011, 16:13 »

Здравствуйте. Есть объект типа 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(...);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Август 16, 2011, 18:18 »

QString & QString::sprintf ( const char * cformat, ... ) ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #2 : Август 16, 2011, 18:28 »

но это крашит программу в момент вызова sprintf() (как и использование QString::sprintf(), но там еще и нельзя формат подавать в utf-8)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
brankovic
Гость
« Ответ #3 : Август 16, 2011, 20:16 »

const char *format = formatString.toUtf8().constData();

так нельзя делать

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.358 секунд. Запросов: 22.