是否有可能避免财产绑定?

时间:2017-03-07 22:16:39

标签: qt qml

在我的QT应用程序中,我想将所有UI字符串移动到中央文件,如下所示:

SharedStrings.qml:

import QtQuick 2.0
pragma Singleton

QtObject {
    readonly property string buttonOKString: "OK"
    readonly property string buttonCancelString: "CANCEL"
}

Example.qml:

text: SharedStrings.buttonOKString

唯一的问题是,据我所知,这会创建一个属性绑定,只要SharedStrings.qml中的值发生更改,就会更新Example.qml的文本。但是,这是不必要的,因为这些值不会改变。这是一个嵌入式应用程序,因此我可以保存的任何内存/处理都是有益的。

有没有办法可以在单个文件中定义字符串并在其他qml文件中使用,而不使用属性绑定?

3 个答案:

答案 0 :(得分:3)

不是绑定,而是使用赋值:

Component.onCompleted: text = SharedStrings.buttonOKString

分配也会破坏任何现有的绑定。

答案 1 :(得分:1)

我在这里看到其他三种方法:

  1. 使用.js文件,如in this answer所述 - 可能是最简单的
  2. 编写一个包含Q_PROPERTYCONSTANT的C ++类。虽然这可能是最快的,但它也是编写代码最多的代码,因为每个常量需要一个getter函数。因此我不推荐它。
  3. 从C ++中,为每个变量调用QQmlContext::setContextProperty("myVar", myVarValue);。缺点是那些是全局变量,所以我再也不推荐它。

答案 2 :(得分:1)

在QML的JavaScript引擎的当前实现中,属性绑定仅在事情发生变化时产生开销。