2016-11-03 229 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 
     } 
    } 
} 

第二屆一個看起來是這樣的:

//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!"; 
     } 
     } 
} 

所以這個按鈕應該改變我的第二個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 {。 ..}和Rect2 {...} 我在做什麼錯?對不起...我是qml編程新手......但感謝您的幫助! –

+0

您需要將'Rect1.qml'和'Rect2.qml'作爲項目的一部分。然後你可以使用它們作爲QML類型。你真的需要退後一步,從頭開始學習QML。開始的好地方是https://qmlbook.github.io/ – dtech

+0

啊,好的......謝謝!愚蠢的我!我之前做了很多次,但忘了在新項目中重新命名我的qml文件... 但是你是對的...我必須學習更多關於QML的知識......很長的路要走! 謝謝你的鏈接! –

相關問題