Создание динамического компонента QML - PullRequest
2 голосов
/ 15 декабря 2011

Я пытаюсь создать экземпляр QtMobility MapPolyline и несколько из Coordinate в QML программно из функции Javascript.

Насколько я вижу, единственный способ создать новый экземплярИз функций 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);
}

1 Ответ

4 голосов
/ 16 декабря 2011

Qt.createComponent необходим URL для загрузки файла.Вот почему он жалуется на отсутствующий файл;вы пытаетесь загрузить файл с именем "Rectangle".

Если вы просто хотите динамически создавать объекты, создайте декларативный компонент.

Component {
    id: component
    Rectangle {
    }
}

Таким образом, функция createPoly должна работать нормально.

...