2014-04-16 3 views
1

Android에서 Qt 5.2.1을 사용하고 있는데 아래 코드와 같은 주 응용 프로그램 창이 있습니다. (예를 들어 약간의 인위적이지만 약간의 작업이 있지만 정확하게 무엇을하는지 보여줍니다) :QtQuick에서 특정 항목 팝업 StackView

property Component mainMenuView: MainMenuView { 
    onMoviesSelected: { 
     stackView.push(moviesListView) 
    } 
    onSettingsSeleted: { } 
    onAboutSeleted: { } 
} 

property Component moviesListView: MovieListView { 
    onMovieSelected: { 
     stackView.push(movieDetailView) 
    } 
    onBack: stackView.pop() 
} 

property Component movieDetailView: MovieDetailView { 
    onCreditsSelected: { 
     stackView.push(personListView) 
    } 
    onBack: stackView.pop() 
} 

property Component personListView: PersonListView { 
    onPersonSelected: { 
     // Pending... 
    } 
    onBack: stackView.pop() 
} 

아이디어는 메뉴에서 선택하면 영화를 볼 수 있습니다. 당신은 영화에서 선택, 당신은 영화 세부 사항을 참조하십시오. 크레딧을보기로 선택하면 캐스트와 승무원 목록이 표시됩니다. 이 모든 것은 StackView을 사용하며 정상적으로 작동합니다. 뒤로 버튼도 잘 돌아가며 한 번에 하나씩보기를 숨 깁니다.

이제 personListView에서 특정 사람을 선택하면 바로 moviesListView으로 건너 뛰고 중간 movieDetailView을 놓치고 싶습니다. 아이디어는 영화 목록에 선택한 사람이 포함 된 영화 만 표시된다는 것입니다.

이 경우에는 moviesListView을 다른 것으로 밀어 넣을 수 있습니다.하지만이 예는 일반적인 문제를 설명하기 위해 고안되었습니다.

이렇게하려면, 당신은 StackViewpop() 메소드를 호출하고 '항목을'다시 가고 싶은 제공 할 수 있습니다 - 그래서 나는이 시도 :

이 실행되면
property Component personListView: PersonListView { 
    onPersonSelected: { 
     stackView.pop(moviesListView) 
    } 
    onBack: stackView.pop() 
} 

, 거기에 오류 메시지를 (그래서 나는 그것이 movieListView이 존재한다는 것을 알고 있다고 가정한다). 그러나 바로 이전의 뷰, 즉 movieDetailView으로 다시 나타난다. 해당보기를 놓치고 movieListView을 표시해야합니다.

mainMenuView으로 다시 이동하려고 시도하면 바로 이전 movieDetailView으로 다시 팝됩니다.

내 생각에 Component을 사용하는 것과 어떻게 관련이 있습니까? 그렇다면 어떻게해야합니까? 아니면 다른 것이 잘못입니까?

답변

1

버그처럼 보입니다. 나는이 예제를 재현 할 수 있습니다 :이 대한 QTBUG-39423 만든

import QtQuick 2.2 
import QtQuick.Controls 1.1 

Rectangle { 
    property Component mainMenuView: Button { 
     text: "mainMenuView" 
     onClicked: { 
      Stack.view.push(moviesListView) 
     } 
    } 

    property Component moviesListView: Button { 
     text: "moviesListView" 
     onClicked: { 
      Stack.view.push(movieDetailView) 
     } 
    } 

    property Component movieDetailView: Button { 
     text: "movieDetailView" 
     onClicked: { 
      Stack.view.push(personListView) 
     } 
    } 

    property Component personListView: Button { 
     text: "personListView" 
     onClicked: { 
      // Wrong: goes to movieDetailView. 
      Stack.view.pop(moviesListView) 
      // Wrong: goes to mainMenuView. 
//   Stack.view.pop({item: moviesListView}) 
     } 
    } 

    StackView { 
     initialItem: mainMenuView 
    } 
} 

.