QSplineSeries QDateTimeAxis QChartView chart (c)

A, rendering
Here Insert Picture Description
two code

#ifndef DYNAMICSINCHART_H
#define DYNAMICSINCHART_H

#include <QObject>
#include <QWidget>
#include <QtCharts>
#include <QtCharts/QSplineSeries>
#include <QDateTime>
class DynamicSinChart : public QWidget
{
    Q_OBJECT
public:
    DynamicSinChart(QWidget* parent = nullptr);
    void init();
private slots:
    void on_timeout();
private:
    QSplineSeries *series1;
    QSplineSeries *series2;
    QChart *chart;
};

#endif // DYNAMICSINCHART_H

#include "dynamicsinchart.h"

DynamicSinChart::DynamicSinChart(QWidget *parent):
    QWidget (parent)
{
    resize(parent->size());
    show();
    init();
}

void DynamicSinChart::init()
{
    series1 = new QSplineSeries;
    series1->setName("series1");

    series2 = new QSplineSeries;
    series2->setName("series2");

    chart = new QChart;
    chart->setAnimationOptions(QChart::SeriesAnimations); // 设置显示时的动画效果

    chart->addSeries(series1);
    chart->addSeries(series2);

    QDateTimeAxis *axisX = new QDateTimeAxis();

    QValueAxis *axisY_1 = new QValueAxis();
    QValueAxis *axisY_2  =new QValueAxis();

    axisX->setMin(QDateTime::currentDateTime().addSecs(-10*1));
    axisX->setMax(QDateTime::currentDateTime().addSecs(0));

    axisY_1->setMin(0);
    axisY_1->setMax(18);

    axisY_2->setMin(0);
    axisY_2->setMax(18);

    axisY_1->setTickCount(7);
    axisY_2->setTickCount(11);

    axisX->setTitleText("x-axis");
    axisY_1->setTitleText("Line1");
    axisY_2->setTitleText("Line2");

    axisY_1->setLinePenColor(QColor(Qt::darkBlue));
    axisY_1->setGridLineColor(QColor(Qt::darkBlue));

    axisY_2->setLinePenColor(QColor(Qt::darkGreen));
    axisY_2->setGridLineColor(QColor(Qt::darkGreen));

    axisY_1->setGridLineVisible(false);
    axisY_2->setGridLineVisible(false);

    QPen penY1(Qt::darkBlue, 3,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin);
    QPen penY2(Qt::darkGreen,3,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin);

    axisY_1->setLinePen(penY1);
    axisY_2->setLinePen(penY2);

    chart->addAxis(axisX,Qt::AlignBottom);
    chart->addAxis(axisY_1,Qt::AlignLeft);
    chart->addAxis(axisY_2,Qt::AlignRight);

    series1->attachAxis(axisX);
    series1->attachAxis(axisY_1);

    series2->attachAxis(axisX);
    series2->attachAxis(axisY_2);

    QChartView *chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);  //抗锯齿渲染
    chartView->setParent(this);
    chartView->resize(this->size());
    chartView->show();

    QTimer *timer = new QTimer;
    timer->start(200);
    connect(timer,SIGNAL(timeout()),this,SLOT(on_timeout()));
}
void DynamicSinChart::on_timeout()
{
    //每增加一个点改变X轴的范围,实现曲线的动态更新效果
    QDateTime bjtime = QDateTime::currentDateTime();

    qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));

    chart->axisX()->setMin(QDateTime::currentDateTime().addSecs(-10*1));
    chart->axisX()->setMax(QDateTime::currentDateTime().addSecs(0));
    if(series1->count()>219)
    {
        series1->removePoints(0,series1->count()-219);
    }

    if(series2->count()>219)
    {
        series2->removePoints(0,series2->count()-219);
    }

    int y1 = qrand()%9+0.8;
    int y2 = 9 + qrand()%9;
    series1->append(bjtime.toMSecsSinceEpoch(),y1);
    series2->append(bjtime.toMSecsSinceEpoch(),y2);
}

e-mail: [email protected]

Published 30 original articles · won praise 1 · views 1155

Guess you like

Origin blog.csdn.net/u010906468/article/details/104685131