summaryrefslogtreecommitdiffstats
path: root/examples/charts/chartsgallery/dynamicsplinewidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/charts/chartsgallery/dynamicsplinewidget.cpp')
-rw-r--r--examples/charts/chartsgallery/dynamicsplinewidget.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/examples/charts/chartsgallery/dynamicsplinewidget.cpp b/examples/charts/chartsgallery/dynamicsplinewidget.cpp
new file mode 100644
index 00000000..fce79d79
--- /dev/null
+++ b/examples/charts/chartsgallery/dynamicsplinewidget.cpp
@@ -0,0 +1,57 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "dynamicsplinewidget.h"
+
+#include <QChart>
+#include <QChartView>
+#include <QRandomGenerator>
+#include <QSplineSeries>
+#include <QValueAxis>
+
+DynamicSplineWidget::DynamicSplineWidget(QWidget *parent)
+ : ContentWidget(parent)
+{
+ auto chart = new QChart;
+ chart->setTitle("Dynamic Spline Chart");
+ chart->legend()->hide();
+ chart->setAnimationOptions(QChart::AllAnimations);
+
+ m_axisX = new QValueAxis;
+ m_axisY = new QValueAxis;
+
+ QObject::connect(&m_timer, &QTimer::timeout, this, &DynamicSplineWidget::handleTimeout);
+ m_timer.setInterval(1000);
+
+ m_series = new QSplineSeries;
+ QPen green(Qt::red);
+ green.setWidth(3);
+ m_series->setPen(green);
+ m_series->append(m_x, m_y);
+
+ chart->addSeries(m_series);
+
+ chart->addAxis(m_axisX,Qt::AlignBottom);
+ chart->addAxis(m_axisY,Qt::AlignLeft);
+ m_series->attachAxis(m_axisX);
+ m_series->attachAxis(m_axisY);
+ m_axisX->setTickCount(5);
+ m_axisX->setRange(0, 10);
+ m_axisY->setRange(-5, 10);
+
+ createDefaultChartView(chart);
+
+ m_timer.start();
+}
+
+void DynamicSplineWidget::handleTimeout()
+{
+ qreal x = defaultChartView()->chart()->plotArea().width() / m_axisX->tickCount();
+ qreal y = (m_axisX->max() - m_axisX->min()) / m_axisX->tickCount();
+ m_x += y;
+ m_y = QRandomGenerator::global()->bounded(5) - 2.5;
+ m_series->append(m_x, m_y);
+ defaultChartView()->chart()->scroll(x, 0);
+ if (m_x >= 100)
+ m_timer.stop();
+}