我正在尝试使用Javascript函数在QML programmaticaly中创建QtMobility MapPolyline
和几个Coordinate
的实例。
据我所知,从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);
}
答案 0 :(得分:4)
Qt.createComponent需要一个URL来加载文件。这就是为什么它抱怨丢失的文件;您正在尝试加载名为“Rectangle”的文件。
如果您只想动态创建对象,请创建组件声明。
Component {
id: component
Rectangle {
}
}
这样,createPoly函数应该可以正常工作。