2014-02-14 19 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++; 
     } 
    } 
    }