Как панорамировать QML Map одним нажатием и начать перетаскивать на нее указатель мыши? - PullRequest
0 голосов
/ 09 февраля 2020

Я включил жесты, как это:

gesture.enabled: true

, но карта не начинает панорамирование, как только я нажимаю и начинаю перемещать указатель мыши, вместо этого карта начинает панорамирование, когда я уже перетащил мышь указатель на 10 пикселей или около того!

Может кто-нибудь помочь мне разрешить мне начать панорамирование карты, как только указатель мыши начнет перетаскивать вместо того, чтобы ждать 10 или около того пикселей ожидания?

1 Ответ

1 голос
/ 09 февраля 2020

Если проанализирован исходный код MapGestureArea , то наблюдается, что используемый порог зависит от QStyleHints::startDragDistance:

bool QQuickGeoMapGestureArea::canStartPan()
{
    if (m_allPoints.count() == 0 || (m_acceptedGestures & PanGesture) == 0
            || (m_mousePoint && m_mousePoint->state() == Qt::TouchPointReleased)) // mouseReleaseEvent handling does not clear m_mousePoint, only ungrabMouse does -- QTBUG-66534
        return false;

    // Check if thresholds for normal panning are met.
    // (normal panning vs flicking: flicking will start from mouse release event).
    <b>const int startDragDistance = qApp->styleHints()->startDragDistance() * 2;</b>
    QPointF p1 = mapFromScene(m_allPoints.at(0).scenePos());
    int dyFromPress = int(p1.y() - m_sceneStartPoint1.y());
    int dxFromPress = int(p1.x() - m_sceneStartPoint1.x());
    if ((qAbs(dyFromPress) >= startDragDistance || qAbs(dxFromPress) >= startDragDistance))
        return true;
    return false;
}

Таким образом, решение заключается в измените это свойство (метод установки startDragDistance не задокументирован для того, что, вероятно, является ошибкой):

# ...
QGuiApplication app(argc, argv);
<b>app.styleHints()->setStartDragDistance(0);</b>
# ...
...