2

QtMobilityのインスタンスとQMLMapPolylineのいくつかをCoordinateJavascript関数からプログラムで作成しようとしています。

私が見る限り、Javascript関数から新しいインスタンスを作成する唯一の方法はとを使用することQt.createComponentですQt.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

1 に答える 1

4

Qt.createComponent には、ファイルをロードするための URL が必要です。そのため、ファイルが見つからないと文句を言います。「Rectangle」というファイルをロードしようとしています。

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

Component {
    id: component
    Rectangle {
    }
}

そうすれば、createPoly 関数は正常に動作するはずです。

于 2011-12-15T23:34:18.047 に答える