2013-08-23 2 views
2

저는 현재 일부 크로스 플랫폼 개발을 위해 Qt를 배우는 중이며 QML을 사용하여 모든 것을하려고합니다. C++을 사용하여 문제를 해결할 수있는 방법이 많이 있다는 것을 알고 있지만 모델에 충실하고 QML을 사용하고 싶습니다.QML : 신호를 통해 조부모님과 의사 소통하기

여기 있습니다 : 다음 코드 에서처럼 qml 파일을 표시하기 위해 로더를 사용하는 경우 secondPage.qml에서 main.qml과 통신하는 방법은 무엇입니까?

신호를 통해 전달하는 것으로 가정했으나, 추가 판독시에는 신호의 모든 동작이 전송 된 클래스 내에있는 것 같습니다 (연결된 메서드 사용). 여기에 내 리소스가 있습니다 : http://qt-project.org/doc/qt-4.8/qmlevents.html#connecting-signals-to-methods-and-signals

또는 QML 응용 프로그램에 대한 잘못된 디자인 일 수 있습니다. 나는 ... 일이 너무 걷잡을 전에 하나의 소스 파일을 사용에서 탈피하기 위해 노력하고있어

main.qml : secondPage.qml에서

Rectangle { 
    id: background 
    ... 
    Item{ 
     id: item1 
     Loader { 
      .... 
      id:pageLoader; 
      source : "secondPage.qml" 
      focus:true; 
     } 
} 
+0

한숨 ... 문제를 명확히하기 위해 텍스트를 다시 쓰고 제목을 수정하지 않았습니다. 배경 요소에 직접 액세스 할 수있는'secondPage.qml'에 "great grandparents"의 누락 사용에 대한 사과 ( – benrules2

+2

@berules). 또 다른 가능성은'secondPage' 컴포넌트에 시그널을 선언하고,이 컴포넌트의 시그널을'Loader'의'onLoaded' 핸들러에있는 조부모의 시그널에 연결하는 것입니다. – koopajah

+1

예! 네가 옳아! 어떻게 든 secondPage.qml이 다른 버그 이후에 부모에 액세스 할 수 없다는 확신을 갖게되었지만, 그렇지 않습니다. 대단히 고마워.이 답안을 제출하면 받아 들일 것입니다. – benrules2

답변

2

가 직접 아이들 때문에 당신의 배경 요소에 액세스 할 수 있습니다 계층 구조에서 부모 중 하나에 액세스 할 수 있어야합니다.

또 다른 가능성은 secondPage 구성 요소에 신호를 선언 한 다음이 구성 요소의 신호를 로더의 onLoaded 처리기의 조부모에있는 신호에 연결하는 것입니다. 부모가 무엇인지 확인하지 않고도 구성 요소를 앱에서 여러 번 재사용 할 수있게하려는 경우 구성 요소를 더 쉽고 깨끗하게 만들 수 있습니다.

+0

미안하지만, 나는 우리가 모두 똑같은 말을하고 같은 대답을 올린 것을 나중에 깨달았다. – Kunal

2

SecondPage.qml에서 신호를 선언하고 Main.qml의 기능에 연결할 수 있습니다.

secondPage.qml에 secondPageSignal()이 정의되어 있고 secondPage의 신호에서 Main.qml의 doSomething() 함수를 호출하려는 경우 Loader의 onLoaded 핸들러에 연결할 수 있습니다.

Rectangle { 
    id: background 
    ... 

    function doSomething() { 
    } 
    Item{ 
     id: item1 
     Loader { 
      .... 
      id: pageLoader; 
      source : "secondPage.qml" 
      focus:true; 

      onLoaded:{ 
       pageLoader.item.secondPageSignal.connect(background.doSomething); 
      } 
     } 
    } 
}