2017-01-14 17 views
0

어쩌면 어리석은 질문 일지 모르겠군요. QML을 처음 접했습니다. 내 StackView의 페이지컨트롤에서 QML StackView에 액세스하십시오.

하나 :

Page 
{ 
    id : root 

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

BACK 버튼 코드 :

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이 작동하도록하려는 인스턴스를 전달합니다. 이는 향후 리팩토링 할 때 훨씬 약해집니다.