2

我正在尝试从 Javascript 函数以编程方式创建 QtMobilityMapPolyline和 QML 中的几个实例。Coordinate

据我所知,从 Javascript 函数创建新实例的唯一方法是使用Qt.createComponentand 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 来加载文件。这就是它抱怨文件丢失的原因。您正在尝试加载一个名为“矩形”的文件。

如果您只想动态创建对象,请创建声明式组件。

Component {
    id: component
    Rectangle {
    }
}

这样 createPoly 函数应该可以正常工作。

于 2011-12-15T23:34:18.047 回答