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);
}
复制代码

 

posted @   larkin-cn  阅读(411)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示