QT QML在运行时不翻译文本集

时间:2018-11-09 16:08:52

标签: 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;
        }
    }

2 个答案:

答案 0 :(得分:1)

您的文本随后没有被翻译的原因是,当您执行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参数不会感到满意)

答案 1 :(得分:0)

您不必使用绑定,而可以使用预定义的QML绑定。要重新构建所有接口,请调用此方法:http://doc.qt.io/qt-5/qqmlengine.html#retranslate