0

我阅读了有关 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 就会意识到somePropertyin BaseState.qml. 在“开始意识到”下,我的意思是,如果我 ctrl/command+click 中的属性,BaseState.qml它会将我带到BaseStateMachine.qml. 一旦我从BaseStateMachine.qmlQtCreator 中删除 id 就找不到someProperty了。

4

1 回答 1

0

与您所指的文档中的第二个示例不同的是,在该示例中,“内部”元素在“外部”元素的定义文件中实例化。

您的设置中的等价物将使用文件中的BaseState类型BaseStateMachine.qml

即这应该工作

import QtQml.StateMachine 1.0 as DSM

DSM.StateMachine {
    property string someProperty

    running: true
    initialState: state

    BaseState {
         id: state
    }
}
于 2016-12-03T14:06:00.083 回答