QLocale setDefault работает только при втором вызове

Я пытаюсь изменить язык по умолчанию QLocale переменная в моем коде, а затем использовать различные разделители каждого языка. Я не хочу менять его для всей системы, я просто хочу иметь возможность печатать числа с различными групповыми и десятичными разделителями. Пользователь может изменить десятичный разделитель на тот, который он или она предпочитает.

//this part works as expected in debugger
QLocale locale;

if(decSep==".")
{
    locale.setDefault(QLocale::English); 
}
else if(decSep==",")
{
    locale.setDefault(QLocale::German);
}
else
{
    locale.setDefault(QLocale::system().language());
}

//added for debug purposes
/*if(local.language()==QLocale::English)
{
    int x=0;//jumped here when it was supposed to do so (decSep==".")
}*/

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

//Now this doesn't work

QString tempNum1 = locale.toString(myNum, 'f');

С locale.toString Я получаю разделители по умолчанию для данного языка.

Теперь моя проблема в том, что для изменения локали переменной, похоже, требуется некоторое время или что-то другое. Когда я меняю decSep var и, следовательно, язык изменяется (я отлаживал это, эта часть изменена, и когда я спрашиваю язык, он дает правильное перечисление), он использует ранее установленные настройки. Когда я снова вызываю функцию, которая дает мне tempNum1 Строка тогда работает.

Это известная проблема или я что-то не так делаю? Можно ли как-то обновить локаль или что-то в этом роде?

1 ответ

Решение

Вы устанавливаете язык по умолчанию, а не язык текущего QLocale объект.

Обратите внимание, что setDefault является статической функцией и, следовательно, не меняет сами свойства объекта, т.е.

locale.setDefault(QLocale::English)

такой же как

QLocale::setDefault(QLocale::English)

пример

Следующий пример может прояснить это поведение:

QLocale locale;
QLocale localeGerman(QLocale::German);
qDebug() << locale.toString(1.234, 'f'); // returns 1.234
qDebug() << localeGerman.toString(1.234, 'f'); // returns 1,234
QLocale::setDefault(QLocale::German); // same as locale.setDefault(QLocale::German);
qDebug() << locale.toString(1.234, 'f'); // returns still 1.234
QLocale locale2;
qDebug() << locale2.toString(1.234, 'f'); // returns 1,234
locale = localeGerman;
qDebug() << locale.toString(1.234, 'f'); // returns 1,234
Другие вопросы по тегам