2011-12-14 3 views
2

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

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

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

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

Component { 
    id: component 
    Rectangle { 
    } 
} 

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

+0

Да, я знаю, что для этого требуется URL-адрес. Однако, поскольку моя цель - указать элемент QtMobility, я не знаю URL. Пример кода - это продукт нескольких итераций, пытающихся заставить его работать, а бит Rectangle - это просто тест, я знаю, что он не должен работать. – Juan

+0

Кажется, это приемлемый способ сделать это, поэтому я приму ответ. Спасибо за Ваш ответ! – Juan