使用QML在加载器内调用类

时间:2014-02-14 18:47:35

标签: javascript c++ qt 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;
    }
 }

}

当我想调用一个函数时出现问题,我收到一个错误:TypeError:表达式'class1ID.myFunction'[undefined]的结果不是函数。

P.S:类'class1'已经有一个名为'myFunction()'的函数

1 个答案:

答案 0 :(得分:7)

如果您想访问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++;
       }
     }
   }