qt - QT QML 在运行时不翻译文本集
问题描述
我在 Qt 5.9 中有一个使用 QML 的简单应用程序。该应用程序有一个Text
我正在翻译的文本元素,并且使用文本末尾带有空字符串的方法可以正常工作。
问题是当我在运行Text
时更改元素的文本时,它不再可翻译。
文本字段的文本提供如下,其中localization.updateLanguage
是空字符串:
Text
{
id: txt
text: qsTrId("test_label") + localization.updateLanguage
color: "white"
font.pixelSize: 40
}
新文本的设置是在单击按钮时完成的,它可以工作。它使用正确的语言设置文本。但在那之后,当尝试更改新文本的语言时,它就不起作用了。
MouseArea
{
anchors.fill: parent
onClicked:
{
txt.text = qsTrId("new_label") + localization.updateLanguage;
}
}
解决方案
之后没有翻译您的文本的原因是因为当您执行 : 时txt.text = qsTrId("new_label") + localization.updateLanguage;
,您正在执行命令式分配,这不会创建绑定,它只被评估一次。
如果要强制创建属性绑定,可以使用Qt.binding()
:
txt.text = Qt.binding(function() { return qsTrId("new_label") + localization.updateLanguage;} )
更多信息在这里:http ://doc.qt.io/qt-5/qtqml-syntax-propertybinding.html#creating-property-bindings-from-javascript
或者,您可以这样做:
property string label: "test_label"
text: qsTrId(label) + localization.updateLanguage
// ...
onClicked: txt.label = "new_label";
(我不认为 lupdate 对动态qsTrId
参数会太满意)
推荐阅读
- c++ - 无法为 clang 指定其他链接文件
- android - Animator set 内的 Animator set
- python - Jupyterhub:PermissionError:[Errno 13] 权限被拒绝:'jupyterhub-proxy.pid'
- javascript - 如何在javascript中获取几天前的日期
- ios - 具有动态标签宽度的堆栈视图分布
- ethereum - 从 ECDSA 公钥生成以太坊地址
- ssrs-2008 - 当我打开报告并查看总数时,Ssrs 表达式返回 #error
- reactjs - 如何验证我的组件中的一些输入?
- spring - 如何使用 Spring Boot 检测 API 请求是来自移动应用程序还是来自 Web
- c# - 从 MultipartFormDataContent 和 StreamContent 获取上传进度