【发布时间】:2015-11-19 08:36:14
【问题描述】:
我有几个状态,我只用来更改一些属性:
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()放在任何地方听起来不是一个好的选择(但我可以创建一个更改状态并运行@ 987654328@ 而不是改变 state 的值)。在实际应用程序中,someProperty是触发事件的秒数,如果状态更改,计时器应该从头开始(如果两个状态的秒数相同,则不会触发somePropertyChange信号,因此计时器不会通过使用属性绑定重新启动)。 -
嗯...如何通过应用程序更改状态?引用其他 qml 文件中的 id?也许您还应该查看
Timer组件中的running属性。 -
同一个 qml 文件的“许多”部分的状态发生了变化。手头的问题是,即使秒的值完全相同,我也需要在状态更改时重新启动
Timer。