main.qml Example File

qmlaxisformatter/qml/qmlaxisformatter/main.qml
/****************************************************************************
**
** 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.1
import CustomFormatter 1.0
import "."

Rectangle {
    id: mainView
    width: 1280
    height: 1024

    Data {
        id: seriesData
    }

    Theme3D {
        id: themeIsabelle
        type: Theme3D.ThemePrimaryColors
        font.family: "Lucida Handwriting"
        font.pointSize: 40
    }

    ValueAxis3D {
        id: dateAxis
        formatter: CustomFormatter {
            originDate:  "2014-01-01"
            selectionFormat: "yyyy-MM-dd HH:mm:ss"
        }
        subSegmentCount: 2
        labelFormat: "yyyy-MM-dd"
        min: 0
        max: 14
    }

    ValueAxis3D {
        id: logAxis
        formatter: LogValueAxis3DFormatter {
            id: logAxisFormatter
            base: 10
            autoSubGrid: true
            showEdgeLabels: true
        }
        labelFormat: "%.2f"
    }

    ValueAxis3D {
        id: linearAxis
        labelFormat: "%.2f"
        min: 0
        max: 500
    }

    ValueAxis3D {
        id: valueAxis
        segmentCount: 5
        subSegmentCount: 2
        labelFormat: "%.2f"
        min: 0
        max: 10
    }

    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: themeIsabelle
            shadowQuality: AbstractGraph3D.ShadowQualitySoftLow
            scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricRight
            axisZ: valueAxis
            axisY: logAxis
            axisX: dateAxis

            Scatter3DSeries {
                id: scatterSeries
                itemLabelFormat: "@xLabel - (@yLabel, @zLabel)"
                meshSmooth: true
                ItemModelScatterDataProxy {
                    itemModel: seriesData.model
                    xPosRole: "xPos"
                    yPosRole: "yPos"
                    zPosRole: "zPos"
                }
            }
        }
    }

    RowLayout {
        id: buttonLayout
        Layout.minimumHeight: exitButton.height
        width: parent.width
        anchors.left: parent.left
        spacing: 0

        NewButton {
            id: yAxisBaseChange
            Layout.fillHeight: true
            Layout.fillWidth: true
            state: "enabled"
            onClicked: {
                if (logAxisFormatter.base === 10)
                    logAxisFormatter.base = 0
                else if (logAxisFormatter.base === 2)
                    logAxisFormatter.base = 10
                else
                    logAxisFormatter.base = 2
            }
            states: [
                State {
                    name: "enabled"
                    PropertyChanges {
                        target: yAxisBaseChange
                        text: "Y-axis log base: " + logAxisFormatter.base
                        enabled: true
                    }
                },
                State {
                    name: "disabled"
                    PropertyChanges {
                        target: yAxisBaseChange
                        text: "Y-axis linear"
                        enabled: false
                    }
                }
            ]
        }

        NewButton {
            id: yAxisToggle
            Layout.fillHeight: true
            Layout.fillWidth: true
            text: "Toggle Y-axis"
            onClicked: {
                if (scatterGraph.axisY === linearAxis) {
                    scatterGraph.axisY = logAxis
                    yAxisBaseChange.state = "enabled"
                } else {
                    scatterGraph.axisY = linearAxis
                    yAxisBaseChange.state = "disabled"
                }
            }
        }

        NewButton {
            id: exitButton
            Layout.fillHeight: true
            Layout.fillWidth: true
            text: "Quit"
            onClicked: Qt.quit(0);
        }
    }
}

© 2016 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.