2016-09-23 3 views
2

저는 QtQuick에서 QML을 사용하여 GUI 개발에 대해 공부하고있는 C++ 개발자입니다.QML에서 GUI 화면 전환 방법

GUI 작성시 한 화면 만 사용자에게 표시됩니다. 그리고 사용자 상호 작용에 따라 화면이 전환됩니다. 하지만 실제로 뒤에 무엇이 발생합니까?

단일 화면을 디자인하는 방법에 대해서만 많은 정보가 있지만, 상태의 전환을 관리하는 방법에 대한 리소스는 매우 적습니다.

, 새로운 화면이 내장로드 된이 파괴되는 응용 프로그램을 시작하고 화면 한 번 표시 레이어 순서를 변경하면로드 된 모든 화면 및 구성 요소,

또는 사용자 작업 후

입니까 (한 번에 하나의 화면 만 메모리에 있음)

이 유형의 처리 용어는 무엇입니까?

내가 그러한 정보를 찾을 수있는 곳을 가리키는 것이 도움이 될 것입니다.

내 질문을 이해할 수없는 경우 알려 주시기 바랍니다. 나는 다시 쓸 것이다 !! 가능한 옵션의

답변

1

사용할 수있는 편리한 기성품 솔루션이 있습니다. 슬라이드/페이드 인 및 페이드 인 페이지를위한 내장 전환을 제공합니다.

StackView { 
    id: stack 
    initialItem: Page { 
     Button { 
      text: "Push" 
      anchors.centerIn: parent 
      onClicked: stack.push(Qt.resolvedUrl("OtherPage.qml")) 
     } 
    } 
} 

StackView는 push 항목, URL 및 구성 요소를 할 수 있습니다. 후자의 두 가지 중 하나를 누르면, StackView는 자동으로 인스턴스를 만들고 파괴합니다. 예를 들어 여러 URL이나 구성 요소를 푸시하면 스택의 현재 항목이되는 최상위 인스턴스 만 인스턴스화됩니다. 일단 스택에서 벗어난 항목이 있으면 스택의 현재 최상위 항목이되고 나면 요청시 항목의 인스턴스를 만듭니다. StackView 또한 replace 스택에 하나 이상의 항목을 허용합니다. 스택에서 동적으로 생성 된 항목을 팝업하거나 대체 할 때 해당 전환이 완료된 후 인스턴스를 자동으로 삭제합니다.

+0

설명해 주셔서 감사합니다. –

+0

기본적으로 'Stackview'가 제공하는 화면 전환 중에 애니메이션을 해제 할 수 있습니까? –

+0

예, push(), pop() 또는 replace()의 마지막 인자로'StackView.Immediate'를 전달할 수 있습니다. – jpnurmi

2

하나는 상태를 사용하여 다른 화면 사이를 전환합니다 :

ColumnLayout { 
    id: controls 

    states: [ 
     State { 
      id: state1 
      name: "STATE1" 

      property list<Item> content: [ 
       Loader { 
        ... 
       }, 
       MyItem { 
        ... 
       } 
      ] 

      PropertyChanges { 
       target: controls 
       children: state1.content 
      } 
     }, 
     State { 
      id: state2 
      name: "STATE2" 

      property list<Item> content: [ 
       MyHud { 
        ... 
       } 
      ] 

      PropertyChanges { 
       target: controls 
       children: state2.content 
      } 
     } 
    ] 
} 
2

서로 다른 QML - 파일 또는 QML-구성 요소를로드 할 수 Loader를 사용할 수 있습니다.

예 : StackView :

import QtQuick 2.0 
Item { 
    width: 200; height: 200 
    Loader { id: pageLoader } 
    MouseArea { 
     anchors.fill: parent 
     onClicked: pageLoader.source = "Page1.qml" 
    } 
}