2012-09-26 3 views
8

저는 팀과 함께 프로젝트 작업을하고 있습니다. 내 임무는 임베디드 시스템 용 QML 및 C++로 Gui를 만드는 것입니다.QML 클릭하면보기가 변합니다.

각보기에는 qml 파일이 있습니다.

하지만 지금은 그들 사이를 탐색하고 싶습니다. 버튼을 클릭하면보기가 전환됩니다. 모든보기에는 뒤로 버튼이있어서 메인보기로 돌아갈 수 있습니다.

qml로 가능합니까? 내가

답변

9

C++로 해결해야 하지 않으면 당신은 QDeclarativeView에서 C++에서 사용 파생 클래스를 만들 수 있습니다

void setSource (const QUrl & url) 

현재 표시되는 QML 파일을 변경할 수 있습니다. 단추를 클릭 할 때이 메서드를 여러 번 호출 할 수 있습니다.

QML 만 사용하는 솔루션도 있습니다.

import QtQuick 1.0 
Item { 
    width: 200; height: 200 

    Loader { id: pageLoader } 

    MouseArea { 
    anchors.fill: parent 
    onClicked: pageLoader.source = "Page1.qml" 
    } 
} 
+0

감사 JuliusG은,하지만 난 모든에가 있어야 버전에 생각보다 예는 로더보기? 아니면 pageloader가 내가 그것을 의미하는 것을 알고 있습니까? – demonking

+2

각 파일에 로더를 추가 할 필요가 없습니다. 하나의 로더로 주요 qml을 가질만큼 충분하며 각보기에서 버튼을 클릭 할 때마다 내용을 변경할 수 있습니다. 로드 된 뷰의 데이터를 main qml로 전달하려면 메인에있는 메소드를 호출 할 수 있습니다. – JuliusG

+0

덕분에 나는 그것을 테스트 한 : 하지만 난 QDeclarativeView은 톤 @JuliusG 의견이 – demonking

9

또 다른 옵션은 당신이 그 QML 뷰의 인스턴스를 어디 주요 QML을 가지고, 당신은 상태를 사용하여 사이에서 변경 : 로더 요소에서 살펴 보자.

Main { 
    View1{id:viewid1} 
    View2{id:viewid2} 
    View3{id:viewid3} 
    states: [ 
    State { 
     name: "" 
    }, 
    State { 
     name: "view1" 
     PropertyChanges {target: viewid1; state: "focused"} 
    }, 
    State { 
     name: "view2" 
     PropertyChanges {target: viewid2; state: "focused"} 
    ... 
    } 
    ] 
} 

이러한 옵션을 이미 제시 한 차이점이 하나가 영구적이다, 다른 요금 당신의 QML (구문 분석 및 인스턴스를 의미합니다 ...)마다.

+0

감사 답변 : 내 일 저장 – demonking

+4

봐 이 솔루션과 @JuliusG의 솔루션의 또 다른 차이점은 시작시에이 솔루션이 모든 QML을 인스턴스화하는 반면 솔루션은 소스가 변경 될 때 각 QML 페이지를 인스턴스화한다는 것입니다. 이것은 귀하의 응용 요구에 따라 도움이되거나 유해 할 수 있습니다. – stackunderflow

4

한 답변에 대한

import QtQuick 2.1 
import QtQuick.Controls 1.1 
import QtQuick.Window 2.1 

ApplicationWindow { 
    title: qsTr("My super app") 
    width: 640 
    height: 480 

    Button { 
     id: settingsButton 
     x: 370 
     y: 0 
     text: qsTr("Settings") 
     /* just change `visible` property by click */ 
     onClicked: { 
      statusView.visible  = false 
      settingsView.visible = true 
     } 
    } 

    Button { 
     id: statusButton 
     x: 171 
     y: 0 
     text: "Status" 
     /* toggle */ 
     onClicked: { 
      statusView.visible  = true 
      settingsView.visible = false 
     } 
    } 

    Item { 
     /* use id for access */ 
     id: statusView 
     x: 0 
     y: 50 
     width: 640 
     height: 430 
     /* visible: true */ 

     Text { 
      anchors.centerIn: parent 
      text: "status" 
     } 
    } 

    Item { 
     id: settingsView 
     x: 0 
     y: 50 
     width: 640 
     height: 430 
     /* invisible */ 
     visible: false 

     Text { 
      anchors.centerIn: parent 
      text: "settings" 
     } 
    } 
} 
+0

감사! 가장 실용적인 :-) –

관련 문제