Qt Qml就像js中的vars一样

时间:2017-02-21 13:05:23

标签: javascript qt variables

这只是一个普遍的问题。 我已经看到了一些像这样的代码实现,但并不完全。 所以在qt creator中我定义了两个属性,如此

property int othervar: 3;
property int val: 1 + othervar;

然后当'othervar'以任何方式改变时,属性'val'将重新评估它的自我。

如果我要重写这样的东西在js中工作,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果你想在QtQuick上下文中这样做,你基本上有两种方法来处理它。在Qt bindings documentation page上很好地解释了绑定。

  1. 随着财产改变"信号处理程序

    Item {
        property int othervar: 3
    
        onOthervarChanged: {
            // Update val
            jsObject.val = 1 + othervar;
        }
    }
    
  2. 通过在现有属性上创建Javascript绑定

    Item {
        property int othervar: 3
        property int val: 0
    
        Component.onCompleted: {
            // Create a binding dynamically
            val = Qt.binding(function() { return 1 + othervar })
        }
    }
    
  3. 重要的是要注意,当分配以前具有绑定的属性时,例如通过执行val = 3,现有绑定将被删除,并且该值将不再自动更新。

答案 1 :(得分:0)

通知和绑定仅适用于QML属性,JS中没有这样的功能。您可以模拟它,但需要一些额外的语法。它不会优雅和方便。

虽然可以实现信号,并使用setter函数而不是=运算符来合并它们,但实际的绑定表达式会很棘手。这在QML中自动发生,如果您手动执行此操作,则必须手动将特定表达式中使用的每个值的通知信号连接到重新评估它的函数。对问题中的琐碎表达来说相当容易,但对于任何复杂的表达都不适用。

简而言之:

  

如果我要重写这样的东西在js工作,我该怎么办?   关于这个?

你可能不会!它需要支持语言"水平。 Qt中的Qt甚至都没有这样的东西,QML也为它们提供了便利。