Qt Quick 2 Custom Input Example▲
Sélectionnez
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Data Visualization module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** 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 General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import
QtQuick 2.1
import
QtQuick.Layouts 1.0
import
QtDataVisualization 1.0
import
"."
Rectangle
{
id
:
mainView
width
:
1280
height
:
720
Data {
id
:
graphData
}
Item
{
id
:
dataView
anchors.bottom
:
parent.bottom
width
:
parent.width
height
:
parent.height -
buttonLayout.height
Scatter3D {
id
:
scatterGraph
width
:
dataView.width
height
:
dataView.height
theme
:
Theme3D {
type
:
Theme3D.ThemeDigia }
shadowQuality
:
AbstractGraph3D.ShadowQualityMedium
scene.activeCamera.yRotation
:
30.0
inputHandler
:
null
Scatter3DSeries {
id
:
scatterSeriesOne
itemLabelFormat
:
"One - X:@xLabel Y:@yLabel Z:@zLabel"
mesh
:
Abstract3DSeries.MeshCube
ItemModelScatterDataProxy {
itemModel
:
graphData.modelOne
xPosRole
:
"xPos"
yPosRole
:
"yPos"
zPosRole
:
"zPos"
}
}
Scatter3DSeries {
id
:
scatterSeriesTwo
itemLabelFormat
:
"Two - X:@xLabel Y:@yLabel Z:@zLabel"
mesh
:
Abstract3DSeries.MeshCube
ItemModelScatterDataProxy {
itemModel
:
graphData.modelTwo
xPosRole
:
"xPos"
yPosRole
:
"yPos"
zPosRole
:
"zPos"
}
}
Scatter3DSeries {
id
:
scatterSeriesThree
itemLabelFormat
:
"Three - X:@xLabel Y:@yLabel Z:@zLabel"
mesh
:
Abstract3DSeries.MeshCube
ItemModelScatterDataProxy {
itemModel
:
graphData.modelThree
xPosRole
:
"xPos"
yPosRole
:
"yPos"
zPosRole
:
"zPos"
}
}
}
MouseArea
{
id
:
inputArea
anchors.fill
:
parent
hoverEnabled
:
true
acceptedButtons
:
Qt.LeftButton |
Qt.RightButton
property
int
mouseX
:
-
1
property
int
mouseY
:
-
1
onPositionChanged
: {
mouseX =
mouse.
x;
mouseY =
mouse.
y;
}
onWheel
: {
// Adjust zoom level based on what zoom range we're in.
var zoomLevel =
scatterGraph.
scene.
activeCamera.
zoomLevel;
if (
zoomLevel &
gt;
100
)
zoomLevel +=
wheel.
angleDelta.
y /
12
.
0
;
else if (
zoomLevel &
gt;
50
)
zoomLevel +=
wheel.
angleDelta.
y /
60
.
0
;
else
zoomLevel +=
wheel.
angleDelta.
y /
120
.
0
;
if (
zoomLevel &
gt;
500
)
zoomLevel =
500
;
else if (
zoomLevel &
lt;
10
)
zoomLevel =
10
;
scatterGraph.
scene.
activeCamera.
zoomLevel =
zoomLevel;
}
}
Timer
{
id
:
reselectTimer
interval
:
10
running
:
true
repeat
:
true
onTriggered
: {
scatterGraph.
scene.
selectionQueryPosition =
Qt.point
(
inputArea.
mouseX,
inputArea.
mouseY);
}
}
}
NumberAnimation
{
id
:
cameraAnimationX
loops
:
Animation.Infinite
running
:
true
target
:
scatterGraph.scene.activeCamera
property
:
"xRotation"
from
:
0.0
to
:
360.0
duration
:
20000
}
SequentialAnimation
{
id
:
cameraAnimationY
loops
:
Animation.Infinite
running
:
true
NumberAnimation
{
target
:
scatterGraph.scene.activeCamera
property
:
"yRotation"
from
:
5.0
to
:
45.0
duration
:
9000
easing.type
:
Easing.InOutSine
}
NumberAnimation
{
target
:
scatterGraph.scene.activeCamera
property
:
"yRotation"
from
:
45.0
to
:
5.0
duration
:
9000
easing.type
:
Easing.InOutSine
}
}
RowLayout
{
id
:
buttonLayout
Layout.minimumHeight
:
shadowToggle.height
width
:
parent.width
anchors.left
:
parent.left
spacing
:
0
NewButton {
id
:
shadowToggle
Layout.fillHeight
:
true
Layout.minimumWidth
:
parent.width /
3
// 3 buttons divided equally in the layout
text
:
scatterGraph.shadowsSupported ? "Hide Shadows"
:
"Shadows not supported"
enabled
:
scatterGraph.shadowsSupported
onClicked
: {
if (
scatterGraph.
shadowQuality ===
AbstractGraph3D.
ShadowQualityNone) {
scatterGraph.
shadowQuality =
AbstractGraph3D.
ShadowQualityMedium;
text
=
"Hide Shadows"
;
}
else {
scatterGraph.
shadowQuality =
AbstractGraph3D.
ShadowQualityNone;
text
=
"Show Shadows"
;
}
}
}
NewButton {
id
:
cameraToggle
Layout.fillHeight
:
true
Layout.minimumWidth
:
parent.width /
3
text
:
"Pause Camera"
onClicked
: {
cameraAnimationX.
paused =
!
cameraAnimationX.
paused;
cameraAnimationY.
paused =
cameraAnimationX.
paused;
if (
cameraAnimationX.
paused) {
text
=
"Animate Camera"
;
}
else {
text
=
"Pause Camera"
;
}
}
}
NewButton {
id
:
exitButton
Layout.fillHeight
:
true
Layout.minimumWidth
:
parent.width /
3
text
:
"Quit"
onClicked
:
Qt.quit(0
);
}
}
}