我阅读了有关 QML 范围的文档。
此文档允许以下内容(在上述文档中的组件实例层次结构第二个示例下):
我的状态机 ( 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 中的范围界定有任何例外。
更新:
如果我添加一个BaseStateMachine.qml
像这样的 id:
import QtQuick 2.5
import QtQml.StateMachine 1.0 as DSM
DSM.StateMachine {
id: _baseStateMachine
property string someProperty
running: true
}
然后 QtCreator 就会意识到someProperty
in BaseState.qml
. 在“开始意识到”下,我的意思是,如果我 ctrl/command+click 中的属性,BaseState.qml
它会将我带到BaseStateMachine.qml
. 一旦我从BaseStateMachine.qml
QtCreator 中删除 id 就找不到someProperty
了。