Qt工作笔记-动态折线图(x轴坐标会改变)

583 篇文章 127 订阅
388 篇文章 20 订阅

运行截图如下:



逻辑很简单,下面直接放代码:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QChartView>
#include <QValueAxis>
#include <QTimerEvent>
#include <QLineSeries>
#include <time.h>

QT_CHARTS_USE_NAMESPACE

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    void timerEvent(QTimerEvent *event);

    void initWidget();

public slots:
    void pbtnClicked();


private:
    Ui::Widget *ui;

    QLineSeries *m_series1;
    QChart *m_chart;

    //x轴&y轴
    QValueAxis *m_axisX;
    QValueAxis *m_axisY;

    int m_x;

    int m_timerId;
    int m_lowPos;
};

#endif // WIDGET_H

main.cpp


#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include <QDebug>


Widget::Widget(QWidget *parent) :
    QWidget(parent),m_x(1),m_lowPos(20),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    initWidget();
    this->setWindowTitle(tr("CSDN IT1995"));

    srand((unsigned)time(NULL));
}

void Widget::initWidget(){

    m_series1=new QLineSeries();
    QPen pen(QColor(120,152,2));
    m_series1->setPen(pen);
    m_series1->setName(tr("访问量"));
    //首先随便建几个
    m_series1->append(0,5);
    m_series1->append(1,7);

    m_chart=new QChart();
    m_chart->addSeries(m_series1);
    m_chart->createDefaultAxes();
    m_chart->setTitle(tr("动态折线图"));

    //设置坐标
    m_axisX=new QValueAxis();
    m_axisX->setTitleText(tr("时间/秒"));

    m_axisY=new QValueAxis();
    m_axisY->setTitleText(tr("人数/个"));

    m_chart->setAxisX(m_axisX,m_series1);
    m_chart->setAxisY(m_axisY,m_series1);

    ui->widget->setChart(m_chart);
    connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(pbtnClicked()));

}

void Widget::pbtnClicked(){

    m_timerId=startTimer(80);
}

void Widget::timerEvent(QTimerEvent *event){
    if(event->timerId()==m_timerId){
        int num=rand()%1501+1;
        m_x++;
        qDebug()<<"m_x:"<<m_x<<"  "<<"m_lowPos:"<<m_lowPos;
        m_series1->append(m_x,num);
        m_axisX->setRange(0,m_x);
        m_axisY->setRange(0,1500);

        if(m_x-20>m_lowPos){
            m_axisX->setRange(m_lowPos++,m_x);

        }

    }
}


Widget::~Widget()
{
    delete ui;
}

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT1995

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值