qml在状态更改后运行javascript代码
我有几个状态,仅用于更改某些属性:qml在状态更改后运行javascript代码,qml,qtquick2,Qml,Qtquick2,我有几个状态,仅用于更改某些属性: Item { id: props property int someProperty: 0 // ... states: [ State { name: "firstState" PropertyChange { target: props someProperty: 1
Item {
id: props
property int someProperty: 0
// ...
states: [
State {
name: "firstState"
PropertyChange {
target: props
someProperty: 1
// ...
}
},
State {
name: "secondState"
PropertyChange {
target: props
someProperty: 1
// ...
}
}
]
onStateChange: doSomething(someProperty)
}
由于不同的状态可能对someProperty
具有相同的值,我不能依赖somePropertyChange
信号,但我甚至不能依赖onStateChange
(如示例所示),因为当它运行时,属性是不变的
那么,如何在每次状态更改时运行
doSomething()
?有一种更好的方法可以使用QML
?执行此类操作,您可以使用运行一些脚本
您在哪里运行状态应更改的命令?在那里,您还可以执行“doSomething()”方法。此外,您可以使用属性绑定来更改属性-这是更好的方法。QML是一种声明性语言@sk2212我通过应用程序在几个部分运行状态更改命令,因此将
doSomething()
放在任何地方听起来都不是一个好的选择(但我可以创建一个函数来更改状态并运行doSomething()
,而不是更改状态值)。在实际应用程序中,someProperty
是触发事件的秒数,如果状态更改,计时器应从一开始就启动(如果两个状态的秒数相同,则不会触发somePropertyChange
信号,因此计时器不会使用属性绑定重新启动).那么…如何通过应用程序更改状态?是否在其他qml文件中引用id?也许您还应该查看定时器组件中的running
属性。同一qml文件的“许多”部分中的状态已更改。当前的问题是,即使秒的值完全相同,当状态发生变化时,我也需要重新启动计时器
Item {
id: props
property int someProperty: 0
states: [
State {
name: "firstState"
PropertyChanges {
target: props
someProperty: 1
}
StateChangeScript {
name: "firstScript"
script: console.log("entering first state")
}
},
State {
name: "secondState"
PropertyChanges {
target: props
someProperty: 1
}
StateChangeScript {
name: "secondScript"
script: console.log("entering second state")
}
}
]
}
Item {
id: props
property int someProperty: 0
// ...
states: [
State {
name: "firstState"
PropertyChange {
target: props
someProperty: 1
// ...
}
},
State {
name: "secondState"
PropertyChange {
target: props
someProperty: 1
// ...
}
}
]
transitions: [
Transition {
ScriptAction {
script: console.log("transition to " + props.state)
}
}
]
}