2016-11-29 69 views
0

我读了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.qmlsomeProperty的。在“意识到”我的意思是,如果我按Ctrl /命令+点击BaseState.qml属性,它将带我到BaseStateMachine.qml。只要我从BaseStateMachine.qml中删除ID,QtCreator就不能再找到someProperty了。

+0

我认为,作为'国家'不继承'QObject'或任何其他可以提供参考父母,解决范围通常的方式不起作用,你需要提供它实际的ID。如果你给'BaseStateMachine'一个id,并且在'State'中引用这个ID,它似乎可以工作。 – derM

+0

感谢您的回答@derM。我目前正在做类似的事情。有趣的是,如果你在状态机中添加一个id,someProperty实际上就成为了IDE中状态怪异的行为。 – Silex

+0

确实。感谢这个有趣的见解! – derM

回答

0

与您引用的文档中第二个示例的区别在于,在示例中,“内部”元素在“外部”元素的定义文件中实例化。

在你的设置相当于将使用BaseState类型BaseStateMachine.qml文件中。

I.e.这应该工作

import QtQml.StateMachine 1.0 as DSM 

DSM.StateMachine { 
    property string someProperty 

    running: true 
    initialState: state 

    BaseState { 
     id: state 
    } 
}