Simple Scatter Graph

// Copyright (C) 2023 The Qt Company Ltd.// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clauseimport QtQuickimport QtQuick.Controlsimport QtGraphsItem {    id: mainView    width: 1600    height: 1200    property bool portraitMode: width < height    // Adjust the button width based on screen orientation:    // If we're in portrait mode, just fit two buttons side-by-side, otherwise    // fit all of the buttons side-by-side.    property real buttonWidth: mainView.portraitMode ? (mainView.width / 2 - 8)                                                     : (mainView.width / 6 - 6)    Data {        id: seriesData    }    Theme3D {        id: themeQt        type: Theme3D.ThemeQt        font.pointSize: 40    }    Theme3D {        id: themeRetro        type: Theme3D.ThemeRetro    }    Item {        id: dataView        anchors.bottom: parent.bottom        width: parent.width        // Adjust the space based on screen orientation:        // If we're in portrait mode, we have 3 rows of buttons, otherwise they are all in one row.        height: parent.height - (mainView.portraitMode ? shadowToggle.implicitHeight * 3 + 25                                                       : shadowToggle.implicitHeight + 10)        Scatter3D {            id: scatterGraph            anchors.fill: parent            theme: themeQt            shadowQuality: AbstractGraph3D.ShadowQualityHigh            scene.activeCamera.cameraPreset: Camera3D.CameraPresetFront            axisX.segmentCount: 3            axisX.subSegmentCount: 2            axisX.labelFormat: "%.2f"            axisZ.segmentCount: 2            axisZ.subSegmentCount: 2            axisZ.labelFormat: "%.2f"            axisY.segmentCount: 2            axisY.subSegmentCount: 2            axisY.labelFormat: "%.2f"            Scatter3DSeries {                id: scatterSeries                itemLabelFormat: "Series 1: X:@xLabel Y:@yLabel Z:@zLabel"                ItemModelScatterDataProxy {                    itemModel: seriesData.model                    xPosRole: "xPos"                    yPosRole: "yPos"                    zPosRole: "zPos"                }            }            Scatter3DSeries {                id: scatterSeriesTwo                itemLabelFormat: "Series 2: X:@xLabel Y:@yLabel Z:@zLabel"                itemSize: 0.05                mesh: Abstract3DSeries.MeshCube                ItemModelScatterDataProxy {                    itemModel: seriesData.modelTwo                    xPosRole: "xPos"                    yPosRole: "yPos"                    zPosRole: "zPos"                }            }            Scatter3DSeries {                id: scatterSeriesThree                itemLabelFormat: "Series 3: X:@xLabel Y:@yLabel Z:@zLabel"                itemSize: 0.1                mesh: Abstract3DSeries.MeshMinimal                ItemModelScatterDataProxy {                    itemModel: seriesData.modelThree                    xPosRole: "xPos"                    yPosRole: "yPos"                    zPosRole: "zPos"                }            }        }    }    Button {        id: shadowToggle        width: mainView.buttonWidth // Calculated elsewhere based on screen orientation        anchors.left: parent.left        anchors.top: parent.top        anchors.margins: 5        text: "Hide Shadows"        onClicked: {            if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) {                scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityHigh;                text = "Hide Shadows";            } else {                scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;                text = "Show Shadows";            }        }    }    Button {        id: smoothToggle        width: mainView.buttonWidth        anchors.left: shadowToggle.right        anchors.top: parent.top        anchors.margins: 5        text: "Use Smooth for Series One"        onClicked: {            if (!scatterSeries.meshSmooth) {                text = "Use Flat for Series One";                scatterSeries.meshSmooth = true;            } else {                text = "Use Smooth for Series One";                scatterSeries.meshSmooth = false;            }        }    }    Button {        id: cameraToggle        width: mainView.buttonWidth        anchors.left: mainView.portraitMode ? parent.left : smoothToggle.right        anchors.top: mainView.portraitMode ? smoothToggle.bottom : parent.top        anchors.margins: 5        text: "Change Camera Placement"        onClicked: {            if (scatterGraph.scene.activeCamera.cameraPreset === Camera3D.CameraPresetFront) {                scatterGraph.scene.activeCamera.cameraPreset =                        Camera3D.CameraPresetIsometricRightHigh;            } else {                scatterGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetFront;            }        }    }    Button {        id: themeToggle        width: mainView.buttonWidth        anchors.left: cameraToggle.right        anchors.top: mainView.portraitMode ? smoothToggle.bottom : parent.top        anchors.margins: 5        text: "Change Theme"        onClicked: {            if (scatterGraph.theme.type === Theme3D.ThemeRetro)                scatterGraph.theme = themeQt;            else                scatterGraph.theme = themeRetro;            if (scatterGraph.theme.backgroundEnabled)                backgroundToggle.text = "Hide Background";            else                backgroundToggle.text = "Show Background";        }    }    Button {        id: backgroundToggle        width: mainView.buttonWidth        anchors.left: mainView.portraitMode ? parent.left : themeToggle.right        anchors.top: mainView.portraitMode ? themeToggle.bottom : parent.top        anchors.margins: 5        text: "Hide Background"        onClicked: {            if (scatterGraph.theme.backgroundEnabled) {                scatterGraph.theme.backgroundEnabled = false;                text = "Show Background";            } else {                scatterGraph.theme.backgroundEnabled = true;                text = "Hide Background";            }        }    }    Button {        id: exitButton        width: mainView.buttonWidth        anchors.left: backgroundToggle.right        anchors.top: mainView.portraitMode ? themeToggle.bottom : parent.top        anchors.margins: 5        text: "Quit"        onClicked: Qt.quit();    }}

版权所有  © 2014-2024 乐数软件    

工业和信息化部: 粤ICP备14079481号-1