2017-01-14 10 views
0

おそらく愚かな質問を申し訳ありません - 私はQMLを非常に新しくしています。私StackViewのページのコントロールからQML StackViewにアクセス

ワン:

Page 
{ 
    id : root 

    header: ToolBar 
    { 
     BackButton 
     { 
      anchors.left: parent.left 
     } 
    } 
} 

戻るボタンコード:

Button 
{ 
    text: "<" 
    font.pixelSize: 20 
    width: 30 
    onClicked: parent.root.StackView.view.pop() 
} 

私もparent.StackViewを試してみました。運がない。取得方法:

TypeError: Cannot call method 'pop' of null 

解決策はありますか?

+0

将来の参考資料として、https://stackoverflow.com/help/mcveで最小限の例を作成する方法を説明します。現在のフォームでは、例は完全ではありません(doesnインポートは含まれず、StackViewはまったく表示されません)。 –

答えて

0
  1. QtやVisual Studio 2015にはいくつかの種類のバグがあります。一般的に、QMLをいくつか修正した後、フルリビルドが必要です。
  2. root.StackView.view.pop()が正しいです。
2

このようなものをお勧めします。

main.qml:

import QtQuick 2.6 
import QtQuick.Controls 2.0 

StackView { 
    id: stackView 
    initialItem: Page { 
     header: ToolBar { 
      BackButton { 
       anchors.left: parent.left 
       view: stackView 
      } 
     } 
    } 
} 

BackButton.qml:

import QtQuick 2.6 
import QtQuick.Controls 2.0 

Button { 
    property StackView view 
    text: "<" 
    font.pixelSize: 20 
    width: 30 
    onClicked: view.pop() 
} 

この方法では、コンポーネントの外部からidに頼っていません。代わりに、BackButtonを操作するインスタンスを渡します。これは、将来のリファクタリング時にははるかに脆弱です。

関連する問題