2017-09-04 17 views
0

Qt 5.9でQt Quick 2.1に問題が発生しました。具体的には、私はStackView QMLコンポーネントを私が必要とするものにするのに苦労しています。私は、プロパティを持つ別のQMLファイルで定義された項目をプッシュしようとしています。ここでは、私が行ったことの説明があります。QML StackView個別のファイルで定義されたコンポーネントをプッシュする方法は?

QML/main.qml

これは、画面を保持StackView QML成分を含みます。 initialItemはOverView画面を正しく表示するので、基本的には意図したとおりに動作していると言えます。

// import ... 
import "screens" 

StackView { 
    id: mainView 
    initialItem: OverviewScreen {} 
} 

QML /スクリーン/ OverviewScreen.qml

これは、GridViewのを含ん概要画面です。 GridViewのデリゲートをクリックすると、添付モデルの役割であるGridViewデリゲートの添付プロパティ 'Id'を持つItemDetailScreenのインスタンスを初期化します。

// import ... 
import "screens" 

Item { 
    // ... 
    GridView { 
     // model: ... 
     delegate: Item { 
      // ... 
      MouseArea { 
       anchors.fill: parent 
       onClicked: { 
        mainView.push({item: ItemDetailScreen, parameters: {id: Id}}) // ERROR 
       } 
      } 
     } 
    } 
} 

qml/screens/ItemDetailScreen.qml 

これにはさまざまなQMLコンポーネントが含まれていますが、ルートコンポーネントとしてItemというよく知られているパターンに従います。

// import ... 

Item { 
    // ... 
} 

問題は、GridViewのデリゲートのonClickedハンドラが実行されたとき、私はItemDetailScreenがMAINVIEWにプッシュされた行を参照する画面に印刷されたエラーを取得していますということです。

私はこのようなOverviewScreenにコンポーネントプロパティを追加する場合:property Component detailScreen: ItemDetailScreen {}とも失敗mainView.push({item: detailScreen, properties: {id: Id}})のように、その後、プッシュが成功したと私はしかし、私はまだ任意のプロパティを渡すことができないんだけど、画面を参照してくださいmainView.push(detailScreen)へのプッシュを変更エラーが発生しました。

私の質問は本当にこれです:プロパティを持つItemDetailScreenのインスタンスをプッシュする正しい方法は何ですか?

+0

'id'はプロパティではなく、あなたがしようとしていることは、正しい方法ではない可能性が最も高いです。 – GrecKo

+0

可能な限り、適切な方法を参考にしてください。 – blockchaindev

答えて

1

あなたがオブジェクトのインスタンスを作成する必要があります。

mainView.push(Qt.createComponent("qml/screens/ItemDetailScreen.qml").createObject()) 

idが正規のプロパティではありません、あなたはそれをあなたがしようとしている方法を設定することはできません、それはあなたができるだけで、QMLのソースで事前に定義する必要があります定期的なプロパティを設定します。プロパティを指定する

Qt.createComponent("qml/screens/ItemDetailScreen.qml").createObject(parentItem, {"width" : 50, "height" : 50}) 

もう一つの方法は、 `コンポーネント」を使用することです:

Component { 
    id: iComp 
    ItemDetailScreen { width: 50; height: 50 } // specify property bindings 
} 
... 
iComp.createObject(parentItem) // create an instance of the component 
関連する問題