Qt Quick 2 Multiple Graphs 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: 800
height: 600
Data {
id: data
}
GridLayout {
id: gridLayout
columns: 2
Layout.fillHeight: true
Layout.fillWidth: true
anchors.top: mainView.top
anchors.bottom: mainView.bottom
anchors.left: mainView.left
anchors.right: mainView.right
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
border.color: surfaceGraph.theme.gridLineColor
border.width: 2
Surface3D {
id: surfaceGraph
anchors.fill: parent
anchors.margins: parent.border.width
theme: Theme3D {
type: Theme3D.ThemePrimaryColors
font.pointSize: 60
}
scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
Surface3DSeries {
itemLabelFormat: "Pop density at (@xLabel N, @zLabel E): @yLabel"
ItemModelSurfaceDataProxy {
itemModel: data.sharedData
// The surface data points are not neatly lined up in rows and columns,
// so we define explicit row and column roles.
rowRole: "row"
columnRole: "col"
xPosRole: "latitude"
zPosRole: "longitude"
yPosRole: "pop_density"
}
}
}
}
// We'll use one grid cell for buttons
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
GridLayout {
anchors.right: parent.right
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
columns: 2
NewButton {
Layout.minimumWidth: parent.width / 2
Layout.fillHeight: true
Layout.fillWidth: true
text: "Clear Selections"
onClicked: clearSelections() // call a helper function to keep button itself simpler
}
NewButton {
Layout.minimumWidth: parent.width / 2
Layout.fillHeight: true
Layout.fillWidth: true
text: "Quit"
onClicked: Qt.quit(0);
}
NewButton {
Layout.fillHeight: true
Layout.fillWidth: true
text: "Reset Cameras"
onClicked: resetCameras() // call a helper function to keep button itself simpler
}
NewButton {
Layout.fillHeight: true
Layout.fillWidth: true
text: "Toggle Mesh Styles"
onClicked: toggleMeshStyle() // call a helper function to keep button itself simpler
}
}
}
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
border.color: scatterGraph.theme.gridLineColor
border.width: 2
Scatter3D {
id: scatterGraph
anchors.fill: parent
anchors.margins: parent.border.width
theme: Theme3D {
type: Theme3D.ThemeDigia
font.pointSize: 60
}
scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
Scatter3DSeries {
itemLabelFormat: "Pop density at (@xLabel N, @zLabel E): @yLabel"
ItemModelScatterDataProxy {
itemModel: data.sharedData
// Mapping model roles to scatter series item coordinates.
xPosRole: "latitude"
zPosRole: "longitude"
yPosRole: "pop_density"
}
}
}
}
Rectangle {
Layout.fillHeight: true
Layout.fillWidth: true
border.color: barGraph.theme.gridLineColor
border.width: 2
Bars3D {
id: barGraph
anchors.fill: parent
anchors.margins: parent.border.width
theme: Theme3D {
type: Theme3D.ThemeQt
font.pointSize: 60
}
selectionMode: AbstractGraph3D.SelectionItemAndRow | AbstractGraph3D.SelectionSlice
scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeftHigh
Bar3DSeries {
itemLabelFormat: "@seriesName: @valueLabel"
name: "Population density"
ItemModelBarDataProxy {
itemModel: data.sharedData
// Mapping model roles to bar series rows, columns, and values.
rowRole: "row"
columnRole: "col"
valueRole: "pop_density"
}
}
}
}
}
function clearSelections() {
barGraph.clearSelection()
scatterGraph.clearSelection()
surfaceGraph.clearSelection()
}
function resetCameras() {
surfaceGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
scatterGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
barGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetIsometricLeftHigh
surfaceGraph.scene.activeCamera.zoomLevel = 100.0
scatterGraph.scene.activeCamera.zoomLevel = 100.0
barGraph.scene.activeCamera.zoomLevel = 100.0
}
function toggleMeshStyle() {
if (barGraph.seriesList[0].meshSmooth === true) {
barGraph.seriesList[0].meshSmooth = false
if (surfaceGraph.seriesList[0].flatShadingSupported)
surfaceGraph.seriesList[0].flatShadingEnabled = true
scatterGraph.seriesList[0].meshSmooth = false
} else {
barGraph.seriesList[0].meshSmooth = true
surfaceGraph.seriesList[0].flatShadingEnabled = false
scatterGraph.seriesList[0].meshSmooth = true
}
}
}

