#include <QHBoxLayout>
#include <QRandomGenerator>

#include "centralwidget.h"

CentralWidget::CentralWidget(QWidget* parent)
    :QWidget(parent),
    _customPlot(new QCustomPlot)
{
    setStyleSheet("background-color: lightgray;");
    resize(888, 666);

    QHBoxLayout* layout = new QHBoxLayout();
    layout->addWidget(_customPlot);
    this->setLayout(layout);

    //创建画布,设置画布上的点数据
    _customPlot->addGraph();
#if 0
    // init data
    QVector<double> x(101), y(101);
    for (int i = 0; i < 101; i++) {
        x[i] = i / 50.0 - 1;//设置x的范围为-1~1
        y[i] = x[i] * x[i];
    }

    _customPlot->graph(0)->setData(x, y);
    //设置坐标轴标签
    _customPlot->xAxis->setLabel("x coordinates");
    _customPlot->yAxis->setLabel("y coordinates");
    //设置坐标轴范围，以便我们可以看到全部数据
    _customPlot->xAxis->setRange(0, 1);
    _customPlot->yAxis->setRange(0, 100);
    _customPlot->replot();
#endif
    startTimer(1000);
}

void CentralWidget::timerEvent(QTimerEvent* event)
{
    //key的单位是秒
    double key = QDateTime::currentDateTime().toMSecsSinceEpoch() / 1000.0;
    //添加数据
    //使用随机数产生一条曲线
    //double value0 = realDataI();
    double value0 = QRandomGenerator::global()->bounded(10.123);
    _customPlot->graph(0)->addData(key, value0);//添加数据到曲线

    //删除8秒之前的数据。这里的8要和下面设置横坐标宽度的8配合起来
    //才能起到想要的效果，可以调整这两个值，观察显示的效果。
    _customPlot->graph(0)->data()->remove(key - 80);
    //自动设定graph(1)曲线y轴的范围，如果不设定，有可能看不到图像
    //也可以用ui->customPlot->yAxis->setRange(up,low)手动设定y轴范围
    _customPlot->graph(0)->rescaleValueAxis(true);

    //这里的8，是指横坐标时间宽度为8秒，如果想要横坐标显示更多的时间
    //就把8调整为比较大到值，比如要显示60秒，那就改成60。
    //这时removeDataBefore(key-8)中的8也要改成60，否则曲线显示不完整。

    _customPlot->yAxis->setRange(0, 20);//设定x轴的范围
    _customPlot->xAxis->setRange(key + 0.25, 80, Qt::AlignRight);//设定x轴的范围
    _customPlot->replot();
}
