以下示例似乎显示了Qt中的错误。或者我错了?
@Override
public void declareOutputFields(OutputFieldsDeclarer ofd) {
Fields respFields = IoTFields.getKafkaResponseFieldsRTEXY();
ofd.declareStream(IoTStreamID.KAFKARESP.name(), respFields);
}
@Override
public void execute(Tuple tuple, BasicOutputCollector collector) {
List<Object> newTuple = new ArrayList<Object>() ;
String params = tuple.getStringByField("params") ;
newTuple.add(3, params);
----
collector.emit(IoTStreamID.KAFKARESP.name(), newTuple);
}
使用非标准语言环境时,在我的示例fr_FR.UTF-8中,创建QApplication似乎更改了系统语言环境,因为atof用它来进行转换。
对我而言,看起来QApplication的创建将拉动系统区域设置并用它调用setenv。
答案 0 :(得分:5)
来自Qt文档
区域设置
在Unix / Linux上,Qt配置为默认使用系统区域设置。 例如,当使用POSIX函数时,这可能会导致冲突 在数据类型(如浮点数和字符串)之间进行转换时,因为区域设置之间的符号可能不同。 要解决此问题,请调用POSIX函数setlocale(LC_NUMERIC,&#34; C&#34;) 在初始化QApplication或QCoreApplication之后,将用于数字格式的区域设置重置为&#34; C&#34; -locale。
答案 1 :(得分:3)
对我而言,看起来QApplication的创建将拉动系统区域设置并用它调用setenv。
void QCoreApplicationPrivate::initLocale()
{
if (qt_locale_initialized)
return;
qt_locale_initialized = true;
#if defined(Q_OS_UNIX) && !defined(QT_BOOTSTRAPPED)
setlocale(LC_ALL, "");
#endif
}
反过来从环境变量中获取区域设置,作为空字符串stands for the user-preferred locale。否则,您将使用C语言环境。