Силовая точка, а не запятая для плавающей точки в Qt
У меня есть очень простой вопрос: как я могу навязать использование точек в числах с плавающей запятой вместо запятой (у меня французская версия моей ОС) в Qt?
Другой вопрос: можно ли отображать числа с пробелами для разделителей тысяч?
2 ответа
Попробуй это:
QLocale loc = QLocale::system(); // current locale
loc.setNumberOptions(QLocale::c().numberOptions()); // borrow number options from the "C" locale
QLocale::setDefault(loc); // set as default
Если вам нужны все параметры, как в "C", вы можете просто сделать
QLocale::setDefault(QLocale::c());
Относительно вашего второго вопроса: Qt не поддерживает пользовательские локали, но вы можете попробовать установить числовые опции, скажем, для локали Венгрии (должно быть 1234 и 12 345.67 - я сам не пробовал)
QLocale loc = QLocale::system(); // current locale
QLocale hungary(QLocale::Hungarian);
loc.setNumberOptions(hungary.numberOptions()); // borrow number options from the Hungarian locale
QLocale::setDefault(loc); // set as default
Для Linux:
Поскольку я живу в Германии, но хочу, чтобы в моей системе использовались сообщения на английском языке, у меня на компьютере смешанная локаль:
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME=de_DE.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=
Это вызвало некоторые проблемы с представлением чисел.
Поскольку я был новичком в QLocale и у меня был ограниченный бюджет времени, я использовал простой хак, чтобы временно «исправить» проблему, и он сработал для меня довольно хорошо:
int main(int argc, char *argv[]) {
// make numbers predictable
// a preliminary hack. Will be fixed with native language support
setenv("LC_NUMERIC", "C",1);
QApplication a(argc, argv);
...
Это имело то преимущество, что числа были унифицированы как в представлении на экране, так и при чтении и записи из и в постоянное хранилище. Последнее было самой большой проблемой, так как, например, числа с плавающей запятой были записаны как «123,45» вместо «123,45».
Не нативное решение, но жизнеспособный трюк, чтобы продвинуться вперед на данный момент.
Просто для полноты: приложение было только для меня. Так что этот трюк, конечно, не претендует на какой-либо профессионализм.