2016-11-03 1 views
1

하나의 qml 파일에서 다른 qml 파일로 통신하는 방법을 찾을 수 없습니다. qml에서 C++ 슬롯으로 신호를 보내고 되돌릴 수있는 여러 가지 방법이 있지만 두 개의 서로 다른 qml 파일 간의 신호에 대한 모든 연구가 실패했습니다. 누군가가 나를 말할 수 있다면 기쁠 것입니다. 어떻게이 문제를 해결해야합니까.하나의 qml에서 다른 신호로 신호를 보내는 방법

더 나은 방법으로 문제를 이해하기위한 모든 약간의 추상화 된 예

우선 ... 기본에

첫 번째 QML 그 다음과 같습니다

//MyQML1.qml 
Rectangle 
{  
    id: idMyRec1 
    signal mySignalFromQML1() 

    Button 
    { 
     id: idMyButton1 
     onClicked: 
     { 
      idMyRec1.mySignalFromQML1();  //to send the signal 
     } 
    } 
} 

제 2 하나는 다음과 같습니다

//MyQML2.qml 
Rectangle 
{ 
    id: idMyRec2 

    Text{ 
     id: idMyText2 
     text: "Hello World!" 

     onMySignalFromQML1:  //to receive the signal from the other qml 
     {     
      idMyText2.text = "Good Bye World!"; 
     } 
     } 
} 

이 단추는 제 2 QML의 텍스트를 "Goodly World!"로 변경해야합니다. 클릭하면 ...하지만 작동하지 않습니다 ... QML에서 다른 QML로 신호를 보내는 다른 방법이 있습니까?! 아니면 내가 잘못하고있는거야?

답변

2

QML 파일 간에는 통신하지 않으며 QML 파일은 프로토 타입 일 뿐이며 개체 인스턴스간에 통신합니다.

// Rect1.qml 
    Rectangle { 
    id: rect1 
    signal mySignal 
    Button { 
     onClicked: rect1.mySignal() 
    } 
    } 

    // Rect2.qml 
    Rectangle { // Rect1.qml 
    property alias text: txt.text 
    Text { 
     id: txt 
    } 
    } 

그리고 당신은 객체를 생성 :

Rect1 { 
    onMySignal: r2.text = "Goodbye world!" 
} 

Rect2 { 
    id: r2 
} 

연결을 만들 수있는 다른 방법이 있습니다, 그러나, 연결 개체 인스턴스가 아닌 QML 파일 사이에 발생합니다. 객체는 동일한 qml 파일에있을 필요는 없지만 처음에는 단순한 것들을 위해 거의 다른 파일에 존재하지는 않습니다.

+0

죄송하지만, 저에게 지금까지는 효과가 없었습니다 ... 구멍을 새 프로젝트에서 테스트 해 보았지만 제 컴파일러가 Rect1 {? ..} 및 Rect2 {...} 무엇이 잘못 되었나요? 죄송합니다 ... qml 프로그래밍에 익숙하지 않습니다 ... 도와 주셔서 감사합니다! –

+0

'Rect1.qml'과'Rect2.qml'을 프로젝트의 일부로 가질 필요가 있습니다. 그런 다음 QML 유형으로 사용할 수 있습니다. 당신은 정말로 뒤로 물러나서 QML을 처음부터 배우기 시작할 필요가 있습니다. 시작할 수있는 좋은 곳은 https://qmlbook.github.io/ – dtech

+0

Ahh, ok ... 감사합니다! 바보 야! 전에도 여러 번 만들었지 만 새 프로젝트에서 내 qml 파일의 이름을 바꾸는 걸 잊었습니다 ... 하지만 당신은 맞습니다 ... 나는 QML에 대해 더 많이 배워야합니다 ... 먼 길을 가야합니다! 링크를 제공해 주셔서 감사합니다. –

관련 문제