我有一个非常基本的问题:如何在 Qt 中强制使用浮点数中的点而不是逗号(我有我的操作系统的法语版本)?
其他问题:是否可以显示带有千位分隔符的数字?
尝试这个:
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:
由于我住在德国,但希望我的系统使用英文消息,所以我的 PC 上有一个混合区域设置:
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 的新手并且有时间预算,所以我使用了一个简单的 hack 来临时“修复”问题,它对我来说效果很好:
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'。
不是原生解决方案,而是暂时领先的可行技巧。
只是为了完整:该应用程序仅供我自己使用。所以这个技巧当然不要求任何专业性。