2016-01-06 12 views
1

Я делаю проект с помощью Qt Creator (Community) 5.5.1 с поддержкой QML. У меня есть этот код:QML-карты: получить координаты при нажатии экрана

main.qml:

MouseArea 
     { anchors.fill: parent 
      onPressed: console.log('latitude = '+ (map.toCoordinate(Qt.point(mouse.x,mouse.y)).latitude), 
            'longitude = '+ (map.toCoordinate(Qt.point(mouse.x,mouse.y)).longitude)); 

Так что, когда я нажимаю на экран, координаты этого места на карте отображаются на консоли. Но я не знаю, как я могу использовать эти координаты для размещения маркера на экране, где произошел щелчок. Вот код маркера:

MapQuickItem { 
     id:marker 
     coordinate: QtPositioning.coordinate(******, ******);//stars are the coordinates 
     sourceItem: Image{ 
      id: image 
      source: "marker2.png" 

     } 
     anchorPoint.x: image.width/2 
     anchorPoint.y: image.height 

    } 

Что я могу сделать, чтобы расположить маркер на карте в координатах, где произошел щелчок? Благодарю.

ответ

2

Просто установите coordinate в обработчике onPressed. Что-то вроде следующего:

import QtQuick 2.0 
import QtLocation 5.5 

Map { 
    id: map 
    plugin: Plugin {name: "osm"} 
    zoomLevel: (maximumZoomLevel - minimumZoomLevel)/2 
    center { 
     // The Qt Company in Oslo 
     latitude: 59.9485 
     longitude: 10.7686 
    } 

    MapQuickItem { 
     id:marker 
     sourceItem: Image{ 
      id: image 
      source: "marker2.png" 

     } 
     coordinate: map.center 
     anchorPoint.x: image.width/2 
     anchorPoint.y: image.height/2 
    } 

    MouseArea { 
     anchors.fill: parent 
     onPressed: { 
      marker.coordinate = map.toCoordinate(Qt.point(mouse.x,mouse.y)) 
     } 
    } 
} 
+0

Спасибо! Но если у меня нет никаких маркеров на карте, и это будет новый маркер? Как я могу сделать? – Khan

+0

@Khan, ваша цель иметь единственный маркер? Вы хотите, чтобы он появлялся только при щелчке? Если да, то как установить «видимый» маркера на false, а затем установить его в true в дескрипторе onPressed. – nfranklin

+0

Если вы хотите «создать» новые маркеры, которые каждый новый клик, проверьте [docs на создание динамических объектов] (http://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html) ..или еще лучше, используйте модель (где вы добавляете локализованные местоположения) и [MapItemView] (http://doc.qt.io/qt-5/qml-qtlocation-mapitemview.htm) – nfranklin

Смежные вопросы