Вы должны использовать идентификаторы для ссылки на компоненты, например, если у вас есть Map и запустите Map.addMapItem(...)
к какой карте будет добавлен элемент?С другой стороны, у вас есть плохая привычка: вы используете имена существующих элементов, таких как Item, который уже является типом, в этом случае измените его на item, чтобы избежать путаницы, учитывая, что приведенное выше решение:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtLocation 5.12
import QtPositioning 5.12
Window {
id: window
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Plugin {
id: mapPlugin
name: "osm"
}
function addMarker(latitude, longitude)
{
var Component = Qt.createComponent("qrc:///views/marker.qml")
var item = Component.createObject(window, {
coordinate: QtPositioning.coordinate(latitude, longitude)
})
map.addMapItem(item)
}
Map {
id: map
anchors.fill: parent
plugin: mapPlugin
center: QtPositioning.coordinate(59.14, 14.15)
zoomLevel: 14
Component.onCompleted:addMarker(59.14, 14.15)
}
}
С другой стороны, в маркере вы указываете, что на изображении в качестве дочернего элемента находится другое изображение, считаете ли вы его правильным ?, в этом нет необходимости, поэтому исправленный код маркера:
import QtQuick 2.0
import QtLocation 5.12
MapQuickItem{
id: marker
anchorPoint.x: marker.width / 4
anchorPoint.y: marker.height
sourceItem: Image{
id: icon
source: "marker.png"
sourceSize.width: 40
sourceSize.height: 40
}
}
полный пример находится в следующей ссылке