| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:FDL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU Free Documentation License Usage |
| ** Alternatively, this file may be used under the terms of the GNU Free |
| ** Documentation License version 1.3 as published by the Free Software |
| ** Foundation and appearing in the file included in the packaging of |
| ** this file. Please review the following information to ensure |
| ** the GNU Free Documentation License version 1.3 requirements |
| ** will be met: https://www.gnu.org/licenses/fdl-1.3.html. |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| /*! |
| \example qmlcustominput |
| \title Qt Quick 2 Custom Input Example |
| \ingroup qtdatavisualization_examples |
| \brief Customizing input in a QML application. |
| |
| The Qt Quick 2 Custom Input example shows how to customize the 3D graph controls from Qt Quick 2 using the MouseArea to capture and process mouse events in QML. |
| Custom input handling code in this example shows how the camera is now controlled by using NumberAnimation to animate the camera and item selection |
| is done on mouseover rather than clicking any mouse buttons. Also the code shows how to implement similar zoom with mouse wheel functionality as the default |
| input handler implements. |
| |
| \image qmlcustominput-example.png |
| |
| \include examples-run.qdocinc |
| |
| \section1 Removing Default Input Handling |
| |
| The default input handling mechanism is disabled by setting the inputHandler property to null. |
| |
| \snippet qmlcustominput/qml/qmlcustominput/main.qml 0 |
| \dots 0 |
| \snippet qmlcustominput/qml/qmlcustominput/main.qml 1 |
| \dots 0 |
| |
| \section1 Implementing Custom Selection Handling |
| |
| The on mouseover selection handling is implemented using standard MouseArea to capture the mouse events. |
| The mouse area is configured to capture hover events and has two custom properties for \c mouseX and \c mouseY |
| to store the last known mouse coordinates. |
| |
| \snippet qmlcustominput/qml/qmlcustominput/main.qml 2 |
| |
| Whenever a pointer movement related signal is received the code updates the \c mouseX and \c mouseY properties. |
| |
| \snippet qmlcustominput/qml/qmlcustominput/main.qml 3 |
| |
| As the selection is one shot, and is cleared each time a 3D frame is rendered, a timer is setup to retrigger selection so that the selection moves to the item |
| currently under the mouse cursor as the camera animates around the graph even when the mouse cursor is not moving. |
| |
| \snippet qmlcustominput/qml/qmlcustominput/main.qml 4 |
| |
| \section1 Implementing Custom Zoom Handling |
| |
| The camera has a zoom factor that represents amount of zoom in percentages. In this example the zoom range is limited |
| between 10% and 500%. This range is then divided to four subranges where angleDelta is scaled to different amount of zoom change |
| based on the current subrange. |
| |
| \dots |
| \snippet qmlcustominput/qml/qmlcustominput/main.qml 5 |
| \dots |
| |
| \section1 Implementing Custom Camera Handling |
| |
| The camera is animated to constantly rotate around the graph with two animations. The rotation around the graph is done with |
| a simple NumberAnimation that just increments during 20 seconds from 0 degrees to 360 degrees and sets the \l Q3DCamera::xRotation property. |
| |
| \snippet qmlcustominput/qml/qmlcustominput/main.qml 6 |
| |
| The camera movement up and down is implemented with a SequentialAnimation that varies the \l Q3DCamera::yRotation property of the camera |
| from 5 degrees to 45 degrees and back with in and out easing. |
| |
| \snippet qmlcustominput/qml/qmlcustominput/main.qml 7 |
| */ |