ScopeView.qml Example File

qmloscilloscope/qml/qmloscilloscope/ScopeView.qml
 /****************************************************************************
 **
 ** Copyright (C) 2016 The Qt Company Ltd.
 ** Contact: https://www.qt.io/licensing/
 **
 ** This file is part of the Qt Charts 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.0
 import QtCharts 2.1

 ChartView {
     id: chartView
     animationOptions: ChartView.NoAnimation
     theme: ChartView.ChartThemeDark
     property bool openGL: true
     property bool openGLSupported: true
     onOpenGLChanged: {
         if (openGLSupported) {
             series("signal 1").useOpenGL = openGL;
             series("signal 2").useOpenGL = openGL;
         }
     }
     Component.onCompleted: {
         if (!series("signal 1").useOpenGL) {
             openGLSupported = false
             openGL = false
         }
     }

     ValueAxis {
         id: axisY1
         min: -1
         max: 4
     }

     ValueAxis {
         id: axisY2
         min: -10
         max: 5
     }

     ValueAxis {
         id: axisX
         min: 0
         max: 1024
     }

     LineSeries {
         id: lineSeries1
         name: "signal 1"
         axisX: axisX
         axisY: axisY1
         useOpenGL: chartView.openGL
     }
     LineSeries {
         id: lineSeries2
         name: "signal 2"
         axisX: axisX
         axisYRight: axisY2
         useOpenGL: chartView.openGL
     }

     Timer {
         id: refreshTimer
         interval: 1 / 60 * 1000 // 60 Hz
         running: true
         repeat: true
         onTriggered: {
             dataSource.update(chartView.series(0));
             dataSource.update(chartView.series(1));
         }
     }

     function changeSeriesType(type) {
         chartView.removeAllSeries();

         // Create two new series of the correct type. Axis x is the same for both of the series,
         // but the series have their own y-axes to make it possible to control the y-offset
         // of the "signal sources".
         if (type == "line") {
             var series1 = chartView.createSeries(ChartView.SeriesTypeLine, "signal 1",
                                                  axisX, axisY1);
             series1.useOpenGL = chartView.openGL

             var series2 = chartView.createSeries(ChartView.SeriesTypeLine, "signal 2",
                                                  axisX, axisY2);
             series2.useOpenGL = chartView.openGL
         } else {
             var series1 = chartView.createSeries(ChartView.SeriesTypeScatter, "signal 1",
                                                  axisX, axisY1);
             series1.markerSize = 2;
             series1.borderColor = "transparent";
             series1.useOpenGL = chartView.openGL

             var series2 = chartView.createSeries(ChartView.SeriesTypeScatter, "signal 2",
                                                  axisX, axisY2);
             series2.markerSize = 2;
             series2.borderColor = "transparent";
             series2.useOpenGL = chartView.openGL
         }
     }

     function createAxis(min, max) {
         // The following creates a ValueAxis object that can be then set as a x or y axis for a series
         return Qt.createQmlObject("import QtQuick 2.0; import QtCharts 2.0; ValueAxis { min: "
                                   + min + "; max: " + max + " }", chartView);
     }

     function setAnimations(enabled) {
         if (enabled)
             chartView.animationOptions = ChartView.SeriesAnimations;
         else
             chartView.animationOptions = ChartView.NoAnimation;
     }

     function changeRefreshRate(rate) {
         refreshTimer.interval = 1 / Number(rate) * 1000;
     }
 }