我读了doc关于QML作用域的内容。StateMachine和State内的QML作用域
通过这个文档以下被允许(成分实例层次第二示例下从上面的DOC):
我的StateMachine(BaseStateMachine.qml
):
import QtQuick 2.5
import QtQml.StateMachine 1.0 as DSM
DSM.StateMachine {
property string someProperty
running: true
}
我的状态(BaseState.qml
):
import QtQuick 2.5
import QtQml.StateMachine 1.0 as DSM
DSM.State {
onEntered: someProperty = "some value"
}
我的主要(main.qml
):
import QtQuick 2.5
import QtQml.StateMachine 1.0 as DSM
ApplicationWindow {
// ...
BaseStateMachine {
initialState: state
BaseState {
id: state
}
}
}
,但我得到了以下错误: qrc:/qml/BaseState.qml:4: ReferenceError: someProperty is not defined
我误解的东西吗?我还在qml上阅读了关于StateMachine的文档,并且在StateMachines和States内没有发现任何例外。
更新:
如果我添加一个id BaseStateMachine.qml
这样的:
import QtQuick 2.5
import QtQml.StateMachine 1.0 as DSM
DSM.StateMachine {
id: _baseStateMachine
property string someProperty
running: true
}
然后QtCreator意识到在BaseState.qml
的someProperty
的。在“意识到”我的意思是,如果我按Ctrl /命令+点击BaseState.qml
属性,它将带我到BaseStateMachine.qml
。只要我从BaseStateMachine.qml
中删除ID,QtCreator就不能再找到someProperty
了。
我认为,作为'国家'不继承'QObject'或任何其他可以提供参考父母,解决范围通常的方式不起作用,你需要提供它实际的ID。如果你给'BaseStateMachine'一个id,并且在'State'中引用这个ID,它似乎可以工作。 – derM
感谢您的回答@derM。我目前正在做类似的事情。有趣的是,如果你在状态机中添加一个id,someProperty实际上就成为了IDE中状态怪异的行为。 – Silex
确实。感谢这个有趣的见解! – derM