0

QMLスコープに関するドキュメントを読みました。

このドキュメントでは、次のことが許可されています (コンポーネント インスタンス階層の下で、上記のドキュメントの 2 番目の例):

マイ ステートマシン ( 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 に関するドキュメントも読みましたが、StateMachine と State 内でのスコープの例外は見つかりませんでした。

アップデート:

このようにIDを追加するとBaseStateMachine.qml

import QtQuick 2.5
import QtQml.StateMachine 1.0 as DSM

DSM.StateMachine {
   id: _baseStateMachine

   property string someProperty

   running: true
}

somePropertyその後、QtCreator はinを認識するようになりBaseState.qmlます。「認識される」の下で、つまり、その中のプロパティを ctrl/command+click すると、 がBaseState.qml表示されBaseStateMachine.qmlます。QtCreatorから ID を削除するとすぐにBaseStateMachine.qml、もう見つかりsomePropertyません。

4

1 に答える 1

0

参照しているドキュメントの2番目の例との違いは、この例では、「内側」要素が「外側」要素の定義ファイル内でインスタンス化されることです。

セットアップで同等なのは、ファイル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 に答える