如何一键平移QML地图并开始在其上拖动鼠标指针?



我启用了这样的手势:

gesture.enabled: true

但是当我按下并开始移动鼠标指针后,地图不会立即开始平移,而是在我已经将鼠标指针拖动到 10 个像素左右时,地图开始平移!

有人可以帮我让我在鼠标指针开始拖动后立即开始平移地图,而不是等待 10 个左右的像素拖动等待?

如果分析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).
const int startDragDistance = qApp->styleHints()->startDragDistance() * 2;
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的setter方法未记录为可能是错误(:

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

最新更新