Hi all.
Is there a way to simulate a pinch gesture on a PinchArea?
I tried to simulate it by sending QTouchEvent events as follows (the given parameter is a pointer to a PinchArea item):
void BackendItem1::pinch1(QQuickItem* item)
{
QList<QTouchEvent::TouchPoint> points1;
QTouchEvent::TouchPoint p1;
p1.setPressure(0.5);
p1.setId(1);
QTouchEvent::TouchPoint p2;
p2.setPressure(0.5);
p2.setId(2);
points1 << p1 << p2;
QTouchEvent te1
(QEvent::TouchBegin, Q_NULLPTR, Qt
::NoModifier, Qt
::TouchPointPressed, points1
);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
points1.clear();
points1 << p1 << p2;
QTouchEvent te2
(QEvent::TouchUpdate, Q_NULLPTR, Qt
::NoModifier, Qt
::TouchPointMoved, points1
);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
points1.clear();
points1 << p1 << p2;
QTouchEvent te3
(QEvent::TouchUpdate, Q_NULLPTR, Qt
::NoModifier, Qt
::TouchPointMoved, points1
);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
points1.clear();
points1 << p1 << p2;
QTouchEvent te4
(QEvent::TouchEnd, Q_NULLPTR, Qt
::NoModifier, Qt
::TouchPointReleased, points1
);
}
void BackendItem1::pinch1(QQuickItem* item)
{
QList<QTouchEvent::TouchPoint> points1;
QTouchEvent::TouchPoint p1;
p1.setPos(QPointF(10, 10));
p1.setStartPos(QPointF(10, 10));
p1.setPressure(0.5);
p1.setId(1);
QTouchEvent::TouchPoint p2;
p2.setPos(QPointF(310, 310));
p2.setStartPos(QPointF(310, 310));
p2.setPressure(0.5);
p2.setId(2);
points1 << p1 << p2;
QTouchEvent te1(QEvent::TouchBegin, Q_NULLPTR, Qt::NoModifier, Qt::TouchPointPressed, points1);
QCoreApplication::sendEvent(item, &te1);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
p1.setPos(QPointF(60, 60));
p2.setPos(QPointF(260, 260));
points1.clear();
points1 << p1 << p2;
QTouchEvent te2(QEvent::TouchUpdate, Q_NULLPTR, Qt::NoModifier, Qt::TouchPointMoved, points1);
QCoreApplication::sendEvent(item, &te2);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
p1.setPos(QPointF(110, 110));
p2.setPos(QPointF(210, 210));
points1.clear();
points1 << p1 << p2;
QTouchEvent te3(QEvent::TouchUpdate, Q_NULLPTR, Qt::NoModifier, Qt::TouchPointMoved, points1);
QCoreApplication::sendEvent(item, &te3);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
p1.setPos(QPointF(110, 110));
p2.setPos(QPointF(210, 210));
points1.clear();
points1 << p1 << p2;
QTouchEvent te4(QEvent::TouchEnd, Q_NULLPTR, Qt::NoModifier, Qt::TouchPointReleased, points1);
QCoreApplication::sendEvent(item, &te4);
}
To copy to clipboard, switch view to plain text mode
or (in the second try I tried to create a QTouchDevice instead of sending Q_NULLPTR):
void BackendItem1::pinch3(QQuickItem* item)
{
QTouchDevice td1;
td1.setMaximumTouchPoints(5);
td1.setType(QTouchDevice::TouchScreen);
QList<QTouchEvent::TouchPoint> points1;
QTouchEvent::TouchPoint p1;
p1.setPressure(0.5);
p1.setId(1);
QTouchEvent::TouchPoint p2;
p2.setPressure(0.5);
p2.setId(2);
points1 << p1 << p2;
QTouchEvent te1
(QEvent::TouchBegin,
&td1, Qt
::NoModifier, Qt
::TouchPointPressed, points1
);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
points1.clear();
points1 << p1 << p2;
QTouchEvent te2
(QEvent::TouchUpdate,
&td1, Qt
::NoModifier, Qt
::TouchPointMoved, points1
);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
points1.clear();
points1 << p1 << p2;
QTouchEvent te3
(QEvent::TouchUpdate,
&td1, Qt
::NoModifier, Qt
::TouchPointMoved, points1
);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
points1.clear();
points1 << p1 << p2;
QTouchEvent te4
(QEvent::TouchEnd,
&td1, Qt
::NoModifier, Qt
::TouchPointReleased, points1
);
}
void BackendItem1::pinch3(QQuickItem* item)
{
QTouchDevice td1;
td1.setMaximumTouchPoints(5);
td1.setType(QTouchDevice::TouchScreen);
QList<QTouchEvent::TouchPoint> points1;
QTouchEvent::TouchPoint p1;
p1.setPos(QPointF(10, 10));
p1.setStartPos(QPointF(10, 10));
p1.setPressure(0.5);
p1.setId(1);
QTouchEvent::TouchPoint p2;
p2.setPos(QPointF(310, 310));
p2.setStartPos(QPointF(310, 310));
p2.setPressure(0.5);
p2.setId(2);
points1 << p1 << p2;
QTouchEvent te1(QEvent::TouchBegin, &td1, Qt::NoModifier, Qt::TouchPointPressed, points1);
QCoreApplication::sendEvent(item, &te1);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
p1.setPos(QPointF(60, 60));
p2.setPos(QPointF(260, 260));
points1.clear();
points1 << p1 << p2;
QTouchEvent te2(QEvent::TouchUpdate, &td1, Qt::NoModifier, Qt::TouchPointMoved, points1);
QCoreApplication::sendEvent(item, &te2);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
p1.setPos(QPointF(110, 110));
p2.setPos(QPointF(210, 210));
points1.clear();
points1 << p1 << p2;
QTouchEvent te3(QEvent::TouchUpdate, &td1, Qt::NoModifier, Qt::TouchPointMoved, points1);
QCoreApplication::sendEvent(item, &te3);
p1.setLastPos(p1.pos());
p2.setLastPos(p2.pos());
p1.setPos(QPointF(110, 110));
p2.setPos(QPointF(210, 210));
points1.clear();
points1 << p1 << p2;
QTouchEvent te4(QEvent::TouchEnd, &td1, Qt::NoModifier, Qt::TouchPointReleased, points1);
QCoreApplication::sendEvent(item, &te4);
}
To copy to clipboard, switch view to plain text mode
I also tried to do that using a QNativeGestureEvent event as follows:
void BackendItem1::pinch2(QQuickItem* item)
{
QNativeGestureEvent nge0
(Qt
::BeginNativeGesture,
QPointF(200,
200),
QNativeGestureEvent nge1
(Qt
::ZoomNativeGesture,
QPointF(200,
200),
QNativeGestureEvent nge2
(Qt
::ZoomNativeGesture,
QPointF(200,
200),
QNativeGestureEvent nge3
(Qt
::EndNativeGesture,
QPointF(200,
200),
}
void BackendItem1::pinch2(QQuickItem* item)
{
QNativeGestureEvent nge0(Qt::BeginNativeGesture, QPointF(200,200),
QPointF(202,202), QPointF(202,202), 1,1,1);
QCoreApplication::sendEvent(item, &nge0);
QNativeGestureEvent nge1(Qt::ZoomNativeGesture, QPointF(200,200),
QPointF(202,202), QPointF(202,202), 0.9,2,1);
QCoreApplication::sendEvent(item, &nge1);
QNativeGestureEvent nge2(Qt::ZoomNativeGesture, QPointF(200,200),
QPointF(202,202), QPointF(202,202), 0.8,3,1);
QCoreApplication::sendEvent(item, &nge2);
QNativeGestureEvent nge3(Qt::EndNativeGesture, QPointF(200,200),
QPointF(202,202), QPointF(202,202), 0.8,4,1);
QCoreApplication::sendEvent(item, &nge3);
}
To copy to clipboard, switch view to plain text mode
But, none of my tries gave me any success (It looks like nothing happens in the PinchArea).
Any idea?
Bookmarks