Отображение маркера в QT QML Map - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь добавить маркер в QT QML Map.Это код, который я использую для добавления маркера на карте, но маркер не отображается.Пожалуйста, помогите!Я новичок в программировании QT.Извините за мою грамматику.Спасибо!

 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 {
         anchors.fill: parent
         plugin: mapPlugin
         center: QtPositioning.coordinate(59.14, 14.15)
         zoomLevel: 14

         Component.onCompleted:
         {
         addMarker(59.14, 14.15)

         }
     }

Marker.qml

MapQuickItem
{
    id: marker
    anchorPoint.x: marker.width / 4
    anchorPoint.y: marker.height
    sourceItem: Image
{

  Image
    {
    id: icon
    source: "marker.png"
    sourceSize.width: 40
    sourceSize.height: 40
    }

}

}

1 Ответ

0 голосов
/ 28 марта 2019

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

полный пример находится в следующей ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...