2014-02-14 41 views
2

裝載機裏面其實我有這樣的代碼:調用類使用QML

import "class1" 
import "class2" 

Item { 
    id: myItem 
    property variant myVar: 0; 
    anchors.fill: parent; 

    Component { 
    id: compClass1 
    class1 { id: class1ID 
    anchors.fill: myItem; 
    } 
    }  
    Component { 
    id: compClass2  
    class2 { 
    anchors.fill: myItem; 
    } 
    } 
    Loader { id: myLoader }  

    function update() { 
    switch(myID.myVar) { 
     case 0: 
     myLoader.sourceComponent = compClass1; 
     classID.myFunction(); 
     break; 

     case 1: 
     myLoader.sourceComponent = compClass2; 
     break; 
    } 
} 

}

當我要調用一個函數的問題,我得到一個錯誤:類型錯誤:表達式的結果「 class1ID.myFunction'[undefined]不是函數。

P.S:類「Class1的」已經一個名爲「myFunction的()」

+0

這與C++有什麼關係? –

+0

如果你想用C++做這個,把這個函數放在main qml文件中,並用invokeMethod執行。 – APRocha

回答

4

如果你想訪問你class1功能,你需要使用item財產上的Loader功能。下面是一個示例:

Rectangle { 
    id: myItem 
    width: 300 
    height: 300 
    color: "yellow" 

    Component { 
     id: compClass1 
     Rectangle { 
     id: class1ID 
     color: "blue" 
     width: myItem.width 
     height: myItem.height 
     function function1() { 
      console.log("I am in class1"); 
     } 
     } 
    } 
    Component { 
     id: compClass2 
     Rectangle { 
     color: "red" 
     width: myItem.width 
     height: myItem.height 
     function function1() { 
      console.log("I am in class2"); 
     } 
     } 
    } 
    Loader { id: myLoader } 

    MouseArea { 
     property int nbClicks: 0 
     anchors.fill: parent 
     onClicked: { 
     if(nbClicks % 2 == 0) { 
      myLoader.sourceComponent = compClass1; 
     } else { 
      myLoader.sourceComponent = compClass2; 
     } 
     myLoader.item.function1(); 
     nbClicks++; 
     } 
    } 
    }