Силовая точка, а не запятая для плавающей точки в 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».

Не нативное решение, но жизнеспособный трюк, чтобы продвинуться вперед на данный момент.

Просто для полноты: приложение было только для меня. Так что этот трюк, конечно, не претендует на какой-либо профессионализм.

Другие вопросы по тегам