是否有可能避免财产约束



在我的qt应用程序中,我想将所有UI字符串移至中央文件,例如下面:

sharedStrings.qml:

import QtQuick 2.0
pragma Singleton
QtObject {
    readonly property string buttonOKString: "OK"
    readonly property string buttonCancelString: "CANCEL"
}

示例.qml:

text: SharedStrings.buttonOKString

唯一的问题是,据我了解,这会创建一个属性绑定,该属性允许示例.qml的文本可以在sharedStrings.qml中的值更改时进行更新。但是,这并不需要,因为这些值不会改变。这是一个嵌入式应用程序,因此我可以保存的任何内存/处理都是有益的。

有没有一种方法可以在单个文件中定义字符串并在其他QML文件中使用,而无需使用属性绑定?

它不是绑定,而是使用分配:

Component.onCompleted: text = SharedStrings.buttonOKString

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

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

  1. 使用.js文件,如本答案中所述 - 可能是最简单的
  2. 编写一个Q_PROPERTY S的C 类,即CONSTANT。虽然这可能是最快的,但它也是最需要编写的代码,因为您需要每个常数一个getter函数。因此,我不建议这样做。
  3. 从C ,为每个变量调用QQmlContext::setContextProperty("myVar", myVarValue);。缺点是那些是全球变量,所以我不建议这样做。

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

最新更新