Название: Проблема с локализацией вещественных чисел в QVariant Отправлено: vi7 от Ноябрь 15, 2014, 19:05 Всем доброго времени.
Подскажите, как правильно «локализировать» QVariant. Суть проблемы в том, что в QT5 (в QT4 этой проблемы не было) QVariant «не правильно» преобразует вещественные числа в строки и наоборот – в качестве разделителя всегда используется точка, а мне нужно, чтобы была запятая. Это происходит из-за того, что в функции преобразования (QVariant ::convert) написано следующее: Код: ... а это значит, что используется QString::number, которая всегда преобразует числа используя точку в качестве разделителя. Аналогично и с обратным преобразованием. Сейчас, для того, чтобы решить эту проблему, мне приходится в каждом месте, где возможно такое преобразование писать что-то вроде: Код: QVariant var_data; А как по правильному сделать, чтобы QVariant выполнял подобные преобразования автоматически? Название: Re: Проблема с локализацией вещественных чисел в QVariant Отправлено: Old от Ноябрь 15, 2014, 19:11 А как по правильному сделать, чтобы QVariant выполнял подобные преобразования автоматически? Сделайте свою функцию my_to_string, которая будет делать как надо и используйте ее.Название: Re: Проблема с локализацией вещественных чисел в QVariant Отправлено: Fregloin от Ноябрь 15, 2014, 23:32 или установите нужную локаль через QLocale::setLocale().
Мне наоборот, нужно было что бы вещ числа писались через точку, т.к. файлы сохранялись под разными ОС, то я в своей программе установил QLocale::setLocale(QLocale::c()); Название: Re: Проблема с локализацией вещественных чисел в QVariant Отправлено: vi7 от Ноябрь 16, 2014, 00:24 Сделайте свою функцию my_to_string, которая будет делать как надо и используйте ее. я так и сделал. Но беда в том, что эти функции нужно вызывать в каждом месте, где происходит переприсвоение QVariant! Т.е. при переносе программы из QT4 на QT5 пришлось кучу дурной работы делать... или установите нужную локаль через QLocale::setLocale(). Мне наоборот, нужно было что бы вещ числа писались через точку, т.к. файлы сохранялись под разными ОС, то я в своей программе установил QLocale::setLocale(QLocale::c()); Увы, QLocale::setLocale() не действует на QString::number, которая как раз и используется внутри кода QVariant! В документации сказано: Цитировать The formatting always uses QLocale::C, i.e., English/UnitedStates. To get a localized string representation of a number, use QLocale::toString() with the appropriate locale. ... Unlike QLocale::toString(), this function does not honor the user's locale settings. Так что, можно и не делать QLocale::setLocale(): там где требуется работа с пользователем использовать QLocale::toString(), а где нужна точка - QString::number. Только, увы, моей проблемы это не решает... Название: Re: Проблема с локализацией вещественных чисел в QVariant Отправлено: kuzulis от Ноябрь 16, 2014, 15:25 Я не понял, в чем проблема использовать всегда QLocale для преобразования в строку и обратно?
ИМХО, это даже будет выгодней, т.к. это только-лишь формат отображения информации, и для "россиян" принято через запятую все шваркать.. Таким образом, если вдруг программа будет распространяться иноземцам, то тут также не будет проблем, и не надо будет ничего лепить, т.к. QLocale автоматом подстроится под локаль.. Ну, или на крайний случай можно сделать настройку в программе где дать пользователю возможность выбора предпочтительного формата данных.. Название: Re: Проблема с локализацией вещественных чисел в QVariant Отправлено: vi7 от Ноябрь 16, 2014, 16:26 Я не понял, в чем проблема использовать всегда QLocale для преобразования в строку и обратно? Я так и поступаю, а вот тот, кто писал QVariant для QT5 поступил по-другому (зачем?). И суть моего вопроса - как это исправить? Изучив исходники QVariant я не понял, как это правильно сделать... Просто интересно - эта "особенность" тянется с самой первой версии QT5 и неужели, никто из "россиян" не работает с QVariant и не решил эту проблему? Название: Re: Проблема с локализацией вещественных чисел в QVariant Отправлено: kuzulis от Ноябрь 16, 2014, 16:51 Цитировать QVariant для QT5 поступил по-другому (зачем?). Я хз, спроси у них в рассылке, запости баг. :) Цитировать Изучив исходники QVariant я не понял, как это правильно сделать... Просто интересно - эта "особенность" тянется с самой первой версии QT5 и неужели, никто из "россиян" не работает с QVariant и не решил эту проблему? А никакой ошибки и нет, все резонно. Скорее всего они просто забыли упомянуть об этом в документации на QVariant или не стали этого делать. Поэтому, т.к. нигде в доке (на Qt4/Qt5) не сказано что QVariant должен возвратить локализованную строку, то и не нужно было на это полагаться. Не факт, что если это работало на Qt4 то это будет работать на Qt5. |