2016-11-03 30 views
1

1つのqmlファイルから別のqmlファイルに通信する方法が見つかりません。私は、qmlからC++スロットに信号を送り戻す方法はたくさんありますが、2つの異なるqmlファイル間の信号に関する私の研究は失敗しました。 誰かが私にこの問題をどのように解決しなければならないか教えてくれたら嬉しいです。qmlから別のqmlに信号を送る方法

より良い方法で問題を理解するために、すべての少し抽象化された例の最初の...

基礎の最初のQMLは、以下のようになります。

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

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

第二1は、このようになります。

//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のテキストを「さよなら世界」に変更する必要があります。クリックされたとき...しかし、これはうまくいきません... 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 {という名前のこれらの "オブジェクト"(? ..} and Rect2 {...} 私は間違っていますか?申し訳ありません... qmlプログラミングの初心者です...あなたのお手伝いに感謝します! –

+0

'Rect1.qml'と' Rect2.qml'をプロジェクトの一部として持つ必要があります。次に、それらをQMLタイプとして使用できます。一歩踏み込んでQMLを最初から学ぶ必要があります。始めるには良い場所はhttps://qmlbook.github.io/ – dtech

+0

ああ、ありがとう!ありがとう!愚かな私!私はこれまでに何度も作ったが、新しいプロジェクトでqmlファイルの名前を変更するのを忘れた... しかし、あなたは正しい... QMLについてもっと学ぶ必要がある。 リンクありがとうございます! –

関連する問題