zoukankan      html  css  js  c++  java
  • qchart绘制曲线

    • 效果图

    • 代码
    #ifndef WIDGET_H
    #define WIDGET_H
    
    #include <QWidget>
    #include <QLineSeries>
    #include <QChartView>
    #include <QChart>
    #include <QTimer>
    #include <QValueAxis>
    #include <QDateTimeAxis>
    
    namespace Ui {
    class Widget;
    }
    
    class Widget : public QWidget
    {
        Q_OBJECT
    
    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();
    
    private slots:
        void on_pushButtonFlush_clicked();
    
        void slotTimeOut();
    
    private:
        Ui::Widget *ui;
        QT_CHARTS_NAMESPACE::QChart* chart;
        QT_CHARTS_NAMESPACE::QChartView* view;
        QT_CHARTS_NAMESPACE::QLineSeries* series1;
        QT_CHARTS_NAMESPACE::QLineSeries* series2;
        QT_CHARTS_NAMESPACE::QLineSeries* series3;
        QT_CHARTS_NAMESPACE::QValueAxis* axisY1;
        QT_CHARTS_NAMESPACE::QValueAxis* axisY2;
        QT_CHARTS_NAMESPACE::QValueAxis* axisY3;
        QT_CHARTS_NAMESPACE::QDateTimeAxis* axisTime;
        QTimer timerFlush;
    };
    
    #endif // WIDGET_H
    #include "widget.h"
    #include "ui_widget.h"
    #include <QDateTime>
    
    QT_CHARTS_USE_NAMESPACE
    
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
        connect(&timerFlush, SIGNAL(timeout()),
                this, SLOT(slotTimeOut()));
        qsrand(QDateTime::currentDateTime().toTime_t());
        chart = new QChart;
        view = new QChartView(chart);
        view->setRenderHint(QPainter::Antialiasing);
        ui->stackedWidget->addWidget(view);
        chart->setTitle("chart test");
    
        axisTime = new QDateTimeAxis;
        axisTime->setTitleText("Time");
        axisTime->setFormat("hh:mm:ss");
        axisTime->setMax(QDateTime::currentDateTime());
        axisTime->setMin(QDateTime::currentDateTime().addSecs(-60));
        chart->addAxis(axisTime, Qt::AlignBottom);
        chart->setTheme(QChart::ChartThemeBlueCerulean);
    
        //Y1
        series1 = new QLineSeries;
        series1->setName("Y1");
        chart->addSeries(series1);
        axisY1 = new QValueAxis;
        axisY1->setTitleText("Y1");
        chart->addAxis(axisY1, Qt::AlignLeft);
        series1->attachAxis(axisTime);
        series1->attachAxis(axisY1);
        series1->setColor(QColor(Qt::blue));
        axisY1->setLinePenColor(QColor(Qt::blue));
        axisY1->setLabelsColor(QColor(Qt::blue));
        axisY1->setRange(0, 100);
        series1->setPointsVisible(true);
        series1->setPointLabelsVisible(true);
    
        //Y2
        series2 = new QLineSeries;
        series2->setName("Y2");
        chart->addSeries(series2);
        axisY2 = new QValueAxis;
        axisY2->setTitleText("Y2");
        chart->addAxis(axisY2, Qt::AlignLeft);
        axisY2->setLabelsColor(QColor(Qt::red));
        axisY2->setLinePenColor(QColor(Qt::red));
        series2->setColor(QColor(Qt::red));
        series2->attachAxis(axisTime);
        series2->attachAxis(axisY2);
        axisY2->setRange(0, 200);
    
        //Y3
        series3 = new QLineSeries;
        series3->setName("Y3");
        chart->addSeries(series3);
        axisY3 = new QValueAxis;
        axisY3->setTitleText("Y3");
        axisY3->setLabelsColor(QColor(Qt::green));
        axisY3->setLinePenColor(QColor(Qt::green));
        axisY3->setRange(0, 300);
        chart->addAxis(axisY3, Qt::AlignLeft);
        series3->setColor(QColor(Qt::green));
        series3->attachAxis(axisTime);
        series3->attachAxis(axisY3);
    
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::on_pushButtonFlush_clicked()
    {
        if(timerFlush.isActive()){
            timerFlush.stop();
        }else{
            series1->clear();
            series2->clear();
            series3->clear();
            timerFlush.start(1000);
        }
    }
    
    void Widget::slotTimeOut()
    {
        QDateTime dtcur = QDateTime::currentDateTime();
        QDateTime dtmin = dtcur.addSecs(ui->spinBox->value()*(-60));
        axisTime->setRange(dtmin, dtcur);
        series1->append(dtcur.toMSecsSinceEpoch(), rand()%100);
        series2->append(dtcur.toMSecsSinceEpoch(), rand()%200);
        series3->append(dtcur.toMSecsSinceEpoch(), rand()%300);
    }
  • 相关阅读:
    List某字段相同时将其他字段数据相加
    【转】常见面试之机器学习算法思想简单梳理
    【转】R语言知识体系概览
    【转】聊聊HTTPS和SSL/TLS协议
    面试总结【1】
    【转】学习Python的19个资源
    【转】机器学习资料汇总
    Python小爬虫
    【转】python操作mysql数据库
    SQL语法
  • 原文地址:https://www.cnblogs.com/larkin-cn/p/15234856.html
Copyright © 2011-2022 走看看