在我的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
分配也将破坏任何现有的绑定。
我在这里看到了其他三种方法:
- 使用.js文件,如本答案中所述 - 可能是最简单的
- 编写一个
Q_PROPERTY
S的C 类,即CONSTANT
。虽然这可能是最快的,但它也是最需要编写的代码,因为您需要每个常数一个getter函数。因此,我不建议这样做。 - 从C ,为每个变量调用
QQmlContext::setContextProperty("myVar", myVarValue);
。缺点是那些是全球变量,所以我不建议这样做。
在QML的JavaScript引擎的当前实现中,属性绑定仅在发生变化时会产生开销。