DSCAnalysisTool/src/ui/centralwidget.cpp

64 lines
2.2 KiB
C++
Raw Normal View History

2025-03-10 09:35:07 +00:00
#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();
}