C++ qti18n:Qt_tru NOOP在c++;qml中的qstr() 我已经在I18N中对QT有足够的知识,但我遇到了一个非常有趣的案例,我甚至不确定它能不能完成。

C++ qti18n:Qt_tru NOOP在c++;qml中的qstr() 我已经在I18N中对QT有足够的知识,但我遇到了一个非常有趣的案例,我甚至不确定它能不能完成。,c++,qt,internationalization,C++,Qt,Internationalization,这是一种情况: 我有一个类Station.cpp,它转换字符串(在我使用tr()之前,但我切换到QT_tr_NOOP)。该字符串随后暴露于qml,并显示为普通文本 forecast_titles.append(QT_TR_NOOP("Tonight")); 问题出现在将该变量暴露于qml后,在生成文本时(当运行Station.cpp代码时),该变量成功地被翻译,但当我更改语言时,该变量不会在qml中重新求值,并保持以原始语言显示 我为什么使用QT_TR_NOOP: QT_TR_NOOP(sou

这是一种情况:

我有一个类Station.cpp,它转换字符串(在我使用tr()之前,但我切换到QT_tr_NOOP)。该字符串随后暴露于qml,并显示为普通文本

forecast_titles.append(QT_TR_NOOP("Tonight"));
问题出现在将该变量暴露于qml后,在生成文本时(当运行Station.cpp代码时),该变量成功地被翻译,但当我更改语言时,该变量不会在qml中重新求值,并保持以原始语言显示

我为什么使用QT_TR_NOOP:

QT_TR_NOOP(sourceText):在 当前上下文(类),即存储的sourceText不会 改变了

所以,我认为,当它到达qml,并显示为

qsTr(mainboard.forecast_titles[0].title) + langProperty.emptyString
它应该可以翻译

我猜问题来自QT_TR_NOOP的定义,它在当前上下文类中指定了

有没有可能用别的方法?(我说的是QT_TRANSLATE_NOOP(),或任何其他命令)这可能是真的不可能的,我可以找到解决方案,但仍然想知道是否可行


备注:只要假设cpp中的变量成功地暴露于QML,就没有问题。

正如我在评论中所说的,我建议直接在QML代码中使用
QT\u TR\u NOOP
,从而让上层翻译字符串


请注意。因此,也许在文档中提到的正确位置使用它是值得的。

关于翻译上下文,您是正确的。在QML端使用
qtranslate('Station',mainboard.forecast_titles[0].title)+langProperty.emptyString

为什么不在QML代码中使用
QT_TR_NOOP
,从而让上层翻译字符串?这正是我的备份解决方案。该方法的唯一缺陷是,我需要从C++传递到QML,让我们说一个代码,并将代码转换为特定的字符串。无论如何谢谢你的想法!我不明白,这不应该是您的备份解决方案,事实上,这是在QML中实现这一点的预期方法。