2011-12-14 107 views
2

我試圖從Javascript函數中創建QML程序中QtMobility MapPolyline和幾個Coordinate的實例。QML動態組件創建

據我所見,從Javascript函數創建新實例的唯一方法是使用Qt.createComponentQt.createQmlObject。但是,我無法找到一種方法來調用createComponent這將工作(我總是得到一個文件不存在的錯誤)。我想避免Qt.createQmlObject,因爲這似乎是一個非常糟糕的做法。

有沒有乾淨的方法來實現這一目標?

Component { 
    id: polyGenerator 
    MapPolyline {} 
} 

function addPoly() { 
    //This next line works, but crashes when trying to add positions 
    //createPoly(polyGenerator); 

    var component = Qt.createComponent("Rectangle"); 
    console.log(component.status + " " + Component.Null); 
    if (component.status == Component.Ready) { 
     createPoly(component); 
    } else if (component.status == Component.Error) { 
     console.log("Error: " + component.errorString()); 
    } else { 
     component.statusChanged.connect(function() { 
      if (component.status == Component.Error) { 
       console.log("Error: " + component.errorString()); 
       return; 
      } 
      createPoly(component); 
     }); 
    } 
} 

function createPoly(component) { 
    var poly = component.createObject(map); 

    poly.border.color = "red"; 
    poly.border.width = 4; 

    // I get a crash here, my guess is that I need proper Coordinate objects 
    poly.addCoordinate({latitude: -34.60553, longitude: -58.38088}); 
    poly.addCoordinate({latitude: -34.60720, longitude: -58.38081}); 
    poly.addCoordinate({latitude: 34.60720, longitude: -58.38081}); 
    poly.addCoordinate({latitude: -34.60597, longitude: -58.37930}); 

    map.addMapObject(poly); 
} 

回答

4

Qt.createComponent需要一個URL來加載文件。這就是爲什麼它抱怨丟失的文件;你正試圖加載一個名爲「Rectangle」的文件。

如果您只是想動態創建組件聲明式。

Component { 
    id: component 
    Rectangle { 
    } 
} 

這樣,createPoly函數應該可以正常工作。

+0

是的,我知道它需要一個URL。但是,因爲我的目標是實例QtMobility項目,所以我不知道URL。示例代碼是幾次迭代試圖使其工作的產物,而Rectangle位只是一個測試,我知道它不應該工作。 – Juan 2011-12-16 04:16:25