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);
          }
      }
  }