QQuickMouseArea: synchronize relative position after dragging

[ChangeLog][QtQuick][QQuickMouseArea] mouseX and mouseY will now
be synchronized after dragging the target item

Fixes: QTBUG-75993
Change-Id: I0b56f6bd494791f9e2fe55a0cf059a7bad2d63dc
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
This commit is contained in:
Wang Chuan 2019-05-25 15:10:03 +08:00 committed by ouchuan
parent 75895afd7d
commit 8068e7b98c
2 changed files with 15 additions and 3 deletions

View File

@ -761,8 +761,10 @@ void QQuickMouseArea::mouseMoveEvent(QMouseEvent *event)
QPointF targetPos = d->drag->target()->position();
if (d->drag->active())
if (d->drag->active()) {
d->drag->target()->setPosition(boundedDragPos);
d->lastPos = d->lastScenePos - mapToScene(position());
}
bool dragOverThresholdX = QQuickWindowPrivate::dragOverThreshold(dragPos.x() - startPos.x(),
Qt::XAxis, event, d->drag->threshold());

View File

@ -393,10 +393,20 @@ void tst_QQuickMouseArea::dragging()
QTRY_COMPARE(blackRect->x(), 61.0);
QCOMPARE(blackRect->y(), 61.0);
qreal relativeX = mouseRegion->mouseX();
qreal relativeY = mouseRegion->mouseY();
for (int i = 0; i < 20; i++) {
p += QPoint(1, 1);
QTest::mouseMove(&window, p);
}
QTRY_VERIFY(drag->active());
QTRY_COMPARE(mouseRegion->mouseX(), relativeX);
QCOMPARE(mouseRegion->mouseY(), relativeY);
QTest::mouseRelease(&window, button, Qt::NoModifier, p);
QTRY_VERIFY(!drag->active());
QTRY_COMPARE(blackRect->x(), 61.0);
QCOMPARE(blackRect->y(), 61.0);
QTRY_COMPARE(blackRect->x(), 81.0);
QCOMPARE(blackRect->y(), 81.0);
}
void tst_QQuickMouseArea::dragSmoothed()