diff options
author | Jarek Kobus <jaroslaw.kobus@qt.io> | 2020-11-16 17:06:51 +0100 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2020-11-17 08:42:57 +0000 |
commit | df9d1414b836c93e97b4e12b90c4bf981b506467 (patch) | |
tree | 4be9619fa7a6893cf9ad71f5b64171213fb10550 | |
parent | 01d509a10050a29ead723c3af3161c941b71b6f2 (diff) |
Don't cast QHoverEvent into QMouseEvent
Such a cast rely on the fact that some internal data
of both classes must match. Qt doesn't guarantee it.
Change-Id: I5c29af98e320b72b599c059a2827eb2e7d3843da
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r-- | share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp index 1495bc4ea5..1853363287 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/editor3d/mousearea3d.cpp @@ -838,6 +838,19 @@ QVector3D MouseArea3D::getMousePosInPlane(const MouseArea3D *helper, return sceneTrans.inverted().transform(intersectGlobalPos).toVec3(); } +static QPoint getPosFromMoveEvent(QEvent *event) +{ + switch (event->type()) { + case QEvent::MouseMove: + return static_cast<QMouseEvent *>(event)->pos(); + case QEvent::HoverMove: + return static_cast<QHoverEvent *>(event)->pos(); + default: + break; + } + return {}; +} + bool MouseArea3D::eventFilter(QObject *, QEvent *event) { if (!m_active || (m_grabsMouse && s_mouseGrab && s_mouseGrab != this @@ -951,10 +964,9 @@ bool MouseArea3D::eventFilter(QObject *, QEvent *event) } case QEvent::MouseMove: case QEvent::HoverMove: { - auto const mouseEvent = static_cast<QMouseEvent *>(event); - const QVector3D mousePosInPlane = getMousePosInPlane(m_dragging ? m_dragHelper : this, - mouseEvent->pos()); - const bool hasMouse = mouseOnTopOfMouseArea(mousePosInPlane, mouseEvent->pos()); + const QPoint pos = getPosFromMoveEvent(event); + const QVector3D mousePosInPlane = getMousePosInPlane(m_dragging ? m_dragHelper : this, pos); + const bool hasMouse = mouseOnTopOfMouseArea(mousePosInPlane, pos); setHovering(hasMouse); @@ -970,7 +982,7 @@ bool MouseArea3D::eventFilter(QObject *, QEvent *event) if (m_dragging && (m_circlePickArea.y() > 0. || !qFuzzyCompare(mousePosInPlane.z(), -1))) { m_mousePosInPlane = mousePosInPlane; - emit dragged(mousePosInPlane.toVector2D(), mouseEvent->pos()); + emit dragged(mousePosInPlane.toVector2D(), pos); } break; |