mirror of https://github.com/qt/qtdatavis3d.git
80 lines
3.7 KiB
Plaintext
80 lines
3.7 KiB
Plaintext
/****************************************************************************
|
|
**
|
|
** Copyright (C) 2014 Digia Plc
|
|
** All rights reserved.
|
|
** For any questions to Digia, please use contact form at http://qt.digia.com
|
|
**
|
|
** This file is part of the QtDataVisualization module.
|
|
**
|
|
** Licensees holding valid Qt Enterprise licenses may use this file in
|
|
** accordance with the Qt Enterprise License Agreement provided with the
|
|
** Software or, alternatively, in accordance with the terms contained in
|
|
** a written agreement between you and Digia.
|
|
**
|
|
** If you have questions regarding the use of this file, please use
|
|
** contact form at http://qt.digia.com
|
|
**
|
|
****************************************************************************/
|
|
|
|
/*!
|
|
\example qmlcustominput
|
|
\title Qt Quick Custom Input Example
|
|
\ingroup qtdatavisualization_examples
|
|
\brief Customizing input in a Qt Quick application.
|
|
|
|
The Qt Quick Custom Input example shows how to customize the 3D graph controls from Qt Quick using the MouseArea to capture and process mouse events in Qt Quick.
|
|
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
|
|
|
|
\section1 Removing default input handling
|
|
|
|
The default input handling mechanism is disabled by setting the inputHandler property to null.
|
|
|
|
\snippet ../examples/qmlcustominput/qml/qmlcustominput/main.qml 0
|
|
\dots 0
|
|
\snippet ../examples/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 ../examples/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 ../examples/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 ../examples/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 ../examples/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 ../examples/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 ../examples/qmlcustominput/qml/qmlcustominput/main.qml 7
|
|
*/
|