2011-12-14 18 views
2

私は、QtMobility MapPolylineのインスタンスとQMLのCoordinateのいくつかを、Javascript関数からプログラマチックに作成しようとしています。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が必要です。そういうわけで、ファイルが見つからないと不平を言うのです。 「長方形」というファイルをロードしようとしています。

オブジェクトを動的に作成したい場合は、コンポーネント宣言を作成します。

Component { 
    id: component 
    Rectangle { 
    } 
} 

こうしてcreatePoly関数はうまく動作するはずです。

+0

はい、URLが必要です。しかし、私の目的はQtMobilityアイテムをインスタンス化することなので、私はそのURLを知らない。サンプルコードは、それを動作させようとするいくつかの繰り返しの結果であり、Rectangleビットは単なるテストに過ぎませんでした。動作しないとわかっています。 – Juan

+0

これはこれが受け入れる方法だと思われますので、私はその答えを受け入れます。ご回答有難うございます! – Juan

関連する問題