Как мне переместить географическую карту во время события pressAndHold в приложении Qt?

Существует программа, которая передает широту и долготу в "Line Edit", Но в то же время возможность перемещения карты теряется. Как заставить карту двигаться за мышью во время события pressAndHold?

places_map.qml:

import QtQuick 2.0
import QtLocation 5.6
import QtPositioning 5.6

Rectangle {
id: rect
Plugin {
id: mapPlugin
name: "osm" // "mapboxgl", "esri", ...
// specify plugin parameters if necessary
// PluginParameter {
//     name:
//     value:
// }
}Map {
id: map
anchors.fill: parent
plugin: mapPlugin
center: QtPositioning.coordinate(59.91, 10.75) // Oslo
zoomLevel: 14
}

MouseArea{
anchors.fill: parent
onClicked:  lineEdit.text = ""+ map.toCoordinate(Qt.point(mouse.x,mouse.y))
}
}

mainwindow.cpp:

#include "mainwindow.h"#include "ui_mainwindow.h"
#include <QQmlContext>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->quickWidget->rootContext()->setContextProperty("lineEdit", ui->lineEdit);
}

MainWindow::~MainWindow()
{
delete ui;
}

1

Решение

Один из способов перемещения карты — использовать жест, как показано ниже:

Map {
[...]
gesture.enabled: true
gesture.acceptedGestures: MapGestureArea.PanGesture
}

Но при использовании MouseArea он блокирует эти действия, поэтому мы можем создать тот же эффект, используя onPressed а также onPositionChanged:

MouseArea{
anchors.fill: parent

property int lastX : -1
property int lastY : -1

onPressed : {
lastX = mouse.x
lastY = mouse.y
}

onPositionChanged: {
map.pan(lastX-mouse.x, lastY-mouse.y)
lastX = mouse.x
lastY = mouse.y
}
onClicked:  lineEdit.text = ""+ map.toCoordinate(Qt.point(mouse.x,mouse.y))
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector