Test MouseArea in QQuickWidget

Task-number: QTBUG-101736
Pick-to: 6.2 6.4 6.5
Change-Id: Iecbe6b4da75851cb94c4c2bae41bb0cb50f0ed30
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Shawn Rutledge 2022-03-18 13:13:24 +01:00 committed by Volker Hilsheimer
parent 164d8f66d8
commit 26cd43f027
2 changed files with 32 additions and 0 deletions

View File

@ -7,8 +7,10 @@ Rectangle {
property bool wasClicked: false
property bool wasDoubleClicked: false
property bool wasMoved: false
color: ma.pressed ? "wheat" : "lightsteelblue"
MouseArea {
id: ma
anchors.fill: parent
hoverEnabled: true
onClicked: wasClicked = true

View File

@ -10,6 +10,7 @@
#include <QtQuick/qquickview.h>
#include <QtQuick/qquickitem.h>
#include <QtQuick/private/qquickitem_p.h>
#include <QtQuick/private/qquickmousearea_p.h>
#include <QtQuickTestUtils/private/qmlutils_p.h>
#include <QtGui/QWindow>
#include <QtGui/QScreen>
@ -123,6 +124,7 @@ private slots:
void mouseEventWindowPos();
void synthMouseFromTouch_data();
void synthMouseFromTouch();
void touchTapMouseArea();
void tabKey();
void resizeOverlay();
void controls();
@ -613,6 +615,7 @@ void tst_qquickwidget::synthMouseFromTouch()
QTest::touchEvent(&window, device).move(0, p2, &window);
QTest::touchEvent(&window, device).release(0, p2, &window);
qCDebug(lcTests) << item->m_touchEvents << item->m_mouseEvents;
QCOMPARE(item->m_touchEvents.size(), synthMouse ? 0 : (acceptTouch ? 3 : 1));
QCOMPARE(item->m_mouseEvents.size(), synthMouse ? 3 : 0);
QCOMPARE(childView->m_mouseEvents.size(), 0);
@ -620,6 +623,33 @@ void tst_qquickwidget::synthMouseFromTouch()
QCOMPARE(ev, Qt::MouseEventSynthesizedByQt);
}
void tst_qquickwidget::touchTapMouseArea()
{
QWidget window;
window.resize(100, 100);
window.setObjectName("window widget");
window.setAttribute(Qt::WA_AcceptTouchEvents);
QVERIFY(QCoreApplication::testAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents));
QQuickWidget *quick = new QQuickWidget(&window);
quick->setSource(testFileUrl("mouse.qml"));
quick->move(50, 50);
quick->setObjectName("quick widget");
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window));
QQuickItem *rootItem = quick->rootObject();
QVERIFY(rootItem);
QQuickMouseArea *ma = rootItem->findChild<QQuickMouseArea *>();
QVERIFY(ma);
QPoint p1 = QPoint(70, 70);
QTest::touchEvent(&window, device).press(0, p1, &window);
QTRY_COMPARE(ma->pressed(), true);
QTest::touchEvent(&window, device).move(0, p1, &window);
QTest::touchEvent(&window, device).release(0, p1, &window);
QTRY_COMPARE(ma->pressed(), false);
QVERIFY(rootItem->property("wasClicked").toBool());
}
void tst_qquickwidget::tabKey()
{
if (QGuiApplication::styleHints()->tabFocusBehavior() != Qt::TabFocusAllControls)