ScopeView.qml Example File | Qt Charts 5.12.11

- Qt 5.12
- Qt Charts
- Qml Oscilloscope
- ScopeView.qml Example File
- Qt Charts | Commercial or GPLv3

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