2017-08-30 20 views
0

という2回目にのみ動作します。コード内の変数QLocaleのデフォルト言語を変更し、各言語の異なる区切り文字を使用しようとしています。私は全体のシステムのためにそれを変更する必要はありません私はちょうど別のグループと小数の区切り文字を印刷する機会を持っているしたいと思います。 ユーザーは小数点記号を好きなものに変更できます。QLocale setDefaultは、

//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==".") 
}*/ 

ここでは、このエラーとは関係のないコードがいくつかあります。 その後、私が使用します。

locale.toString
//Now this doesn't work 

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

私は特定の言語にセパレータのデフォルトを取得します。

今、私の問題は、ロケール変数が他の設定に変更するには時間がかかります。 decSep varを変更すると言語が変更されます(私はこれをデバッグしました。この部分に変更されています)。関数を呼び出すと、tempNum1の文字列が返されます。

これは既知の問題ですか、間違っていますか?どういうわけかロケールなどを更新できますか?

答えて

0

現在のQLocaleオブジェクトの言語ではなく、デフォルトのロケールを設定しています。すなわち

locale.setDefault(QLocale::English) 

setDefault静的関数であり、したがって、それはオブジェクトのプロパティ自体を変更しないこと

注、

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 
関連する問題