Qt 区分动态指定的特性和静态指定的特性

Qt 区分动态指定的特性和静态指定的特性,qt,qml,Qt,Qml,此代码示例来自Qt文档 资料来源: 例如,下面的矩形最初确保其高度为 总是两倍于它的宽度。但是,当按下空格键时 宽度*3的当前值将作为静态值指定给高度。 之后,高度将保持在此值不变,即使 宽度改变。静态值的赋值将删除绑定 我不明白这个例子。为什么第一个赋值创建绑定,而第二个赋值指定静态值?如注释中所示。两者之间的区别是什么 高度:宽度*2和高度=宽度*3 进行计算是Qml/QtQuick语法的一部分 为什么第一个赋值创建绑定,而第二个赋值指定静态值 主要区别在于前者作为Qml的一部分进行评估(使

此代码示例来自Qt文档

资料来源:

例如,下面的矩形最初确保其高度为 总是两倍于它的宽度。但是,当按下空格键时 宽度*3的当前值将作为静态值指定给高度。 之后,高度将保持在此值不变,即使 宽度改变。静态值的赋值将删除绑定

我不明白这个例子。为什么第一个赋值创建绑定,而第二个赋值指定静态值?

如注释中所示。两者之间的区别是什么

高度:宽度*2
高度=宽度*3

进行计算是Qml/QtQuick语法的一部分

为什么第一个赋值创建绑定,而第二个赋值指定静态值

主要区别在于前者作为Qml的一部分进行评估(使用属性绑定)✨) 后者作为JS的一部分进行评估(作为一个即时的静态赋值)

如果在等号上使用冒号,第二个赋值是否也有效

如果您想通过JS设置属性绑定,请参阅(与您链接的文章相同)

一般语法规则是什么,使得第一条语句作为QML的一部分进行求值,第二条语句作为js进行求值,而不添加任何魔法

这些文章比我解释得更好

这是Qml范围的一般概述:

这解释了如何在附加属性中使用JS作用域

在代码中,
矩形
是一个项(也是一个Qml对象)。另一方面,
宽度
高度
焦点
键。onSpacePressed
都是附加属性。它们具有JS作用域功能。
键上的括号。onSpacePressed
仅是JS作用域到多行的扩展

虽然不经常这样做,但实际上你可以这样做

Rectangle {
    width: {
        var temp = 5;
        width = 20 * 5;
    }
    height: width * 2

}

两者都使用JS将
宽度设置为100


这在很大程度上是通过经验获得的。一旦你经常使用Qml,阅读大量示例,你就会掌握它的诀窍。

这是语法的一部分。我不理解该示例中的语法。请展开。如果在等号上使用冒号,第二个赋值也会起作用吗?不,冒号用于赋值值直接指向属性。为什么第一条语句作为QML的一部分进行计算?一般语法规则是什么,使得第一条语句作为QML的一部分进行计算,第二条语句作为js进行计算,而不添加任何魔法?您好,我已经更新了我的答案,并添加了几个链接供进一步阅读。希望对您有所帮助。
Rectangle {
    width: 100
    height: width * 2

    focus: true
    Keys.onSpacePressed: {
        height = width * 3
    }
}
Rectangle {
    width: {
        var temp = 5;
        width = 20 * 5;
    }
    height: width * 2

}
Rectangle {
    width: {
        var temp = 5;
        return 20 * 5;
    }
    height: width * 2

}