使用Qchart实现曲线移动更新

来源:互联网 发布:日本古城建篵坉典 淘宝 编辑:程序博客网 时间:2024/05/19 08:40

主要实现,当数据还未填充整个显示区时,曲线从右到左逐渐出现,当充满显示区后,旧数据用新数据来替代。
效果图如下
这里写图片描述
加强功能后的效果
这里写图片描述
添加散点图后的效果
这里写图片描述
代码如下

main.c文件

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.show();    return a.exec();}

mainwindow.h文件

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QtCharts/QChartView>#include <QtCharts/QSplineSeries>#include <QtCore/QTimer>#include <QList>#include <QPushButton>QT_CHARTS_USE_NAMESPACEclass MainWindow : public QMainWindow{    Q_OBJECTpublic:    MainWindow(int max = 100,QWidget *parent = 0);    ~MainWindow();public slots:    void handleTimeout();    void handlebutton();private:    const int max_count;    QTimer m_timer;    QPushButton *button ;    bool start;    QList<int>  data;    QSplineSeries *series;    QChart *chart;    QChartView *chartView;    int count;};#endif // MAINWINDOW_H

mainwindow.c文件

#include "mainwindow.h"#include <QtCore/QTime>#include <QPushButton>#include <QVBoxLayout>MainWindow::MainWindow(int max,QWidget *parent)    : QMainWindow(parent),max_count(max){    count = 0;    start = true;    qsrand((uint) QTime::currentTime().msec());    series = new QSplineSeries();    chart = new QChart();    chart->legend()->hide();    chart->addSeries(series);    chart->setTitle("自动移动曲线");    chart->createDefaultAxes();    chart->axisY()->setRange(-10, 80);    chart->axisX()->setRange(0, max_count);    chartView = new QChartView(chart);    chartView->setRenderHint(QPainter::Antialiasing);    button = new QPushButton("停止", this);    QObject::connect(button, SIGNAL(pressed()), this, SLOT(handlebutton()));    QObject::connect(&m_timer, SIGNAL(timeout()), this, SLOT(handleTimeout()));    m_timer.setInterval(100);    QVBoxLayout *mainLayout = new QVBoxLayout();    mainLayout->addWidget(chartView);    mainLayout->addWidget(button);    QWidget* widget = new QWidget(this);    widget->setLayout(mainLayout);    setCentralWidget(widget);    resize(900, 800);    m_timer.start();}MainWindow::~MainWindow(){}void MainWindow::handleTimeout(){    int m_y = qrand() % 45 + 5;    count++;    if(count > max_count)    {        data.pop_front();        data<<m_y;        series->clear();        for(int i =0; i<max_count;i++)        {            series->append(i, data.at(i));        }    }    else    {        data<<m_y;        series->clear();        for(int i =0; i<count;i++)        {            series->append(max_count-i, data.at(count-i-1));        }    }}void MainWindow::handlebutton(){    if(start)    {        start = false;        m_timer.stop();        button->setText("启动");    }    else    {        start = true;        m_timer.start();        button->setText("停止");    }}

有更好意见的的朋友请留言!
曲线源码
添加散点图后的源代码
需要的朋友可以下载参考!!

原创粉丝点击