Qt是否在强制系统区域设置?

Mat*_*hal 2 qt locale

以下示例似乎显示了Qt中的错误。还是我弄错了?

std::cout << atof("0.456") << std::endl; // OK prints 0.456
QApplication app (argc, argv);
//QLocale::setDefault(QLocale::C); // No effect at all.
std::cout << atof("0.456") << std::endl; // do not work on on fr_FR.UTF-8, print 0.
Run Code Online (Sandbox Code Playgroud)

当使用非标准语言环境时,在我的示例fr_FR.UTF-8中,创建QApplication似乎会更改系统语言环境,因为atof使用它来进行转换。

在我看来,创建QApplication会拉动系统区域设置并使用它调用setenv。

Evg*_*eny 6

从Qt文档

区域设置

在Unix / Linux上,Qt默认配置为使用系统区域设置。在使用POSIX函数时,例如在浮点数和字符串之类的数据类型之间进行转换时,这可能会导致冲突,因为在不同的语言环境中,表示法可能有所不同。要解决此问题,请在初始化QApplication或QCoreApplication之后立即将POSIX函数setlocale(LC_NUMERIC,“ C”)重置为数字格式设置为“ C”-语言环境的语言环境。