Qt是否强制使用系统语言环境?

3
以下示例似乎显示了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.

当使用非标准语言环境时,例如fr_FR.UTF-8,在创建QApplication时似乎会更改系统语言环境,因为它被用于atof进行转换。
对我来说,这看起来像是创建QApplication将提取系统语言环境并调用setenv。
2个回答

7

来自Qt文档

本地化设置

在Unix/Linux上,默认情况下,Qt配置使用系统本地化设置。这可能会在使用POSIX函数时导致冲突,例如,在转换浮点数和字符串等数据类型时,因为符号可能因语言环境而异。为了解决这个问题,请在初始化QApplication或QCoreApplication后立即调用POSIX函数setlocale(LC_NUMERIC,“C”),以将用于数字格式化的语言环境重置为“C”语言环境。


那确实是我错过的文档片段。 - Mathieu Westphal

3

在我看来,QApplication的创建将会获取系统语言环境并调用setenv函数。

不,它将会调用setlocale函数

void QCoreApplicationPrivate::initLocale()
{
    if (qt_locale_initialized)
        return;
    qt_locale_initialized = true;
#if defined(Q_OS_UNIX) && !defined(QT_BOOTSTRAPPED)
    setlocale(LC_ALL, "");
#endif
}

这将从环境变量中获取区域设置,其中空字符串 代表用户首选区域设置。否则,您将使用C语言环境。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接