| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 
 | #include "WindowTrend_INS.h"#include "ui_WindowTrend_INS.h"
 
 WindowTrend_INS::WindowTrend_INS(QWidget *parent) :
 QWidget(parent),
 ui(new Ui::WindowTrend_INS)
 {
 ui->setupUi(this);
 initData();
 }
 
 WindowTrend_INS::~WindowTrend_INS()
 {
 delete ui;
 }
 
 void WindowTrend_INS::initData()
 {
 datetimeNow = QDateTime::currentDateTime();
 datetimeFuture30Days = datetimeNow.addDays(30);
 
 ui->timefrom->setDateTime(datetimeNow);
 ui->timeto->setDateTime(datetimeFuture30Days);
 
 chart = new QChart();
 ui->chart_trend->setRenderHint(QPainter::Antialiasing);
 
 // 创建历史数据曲线
 historicSeries = new QSplineSeries();
 historicSeries->setName("历史数据");
 
 // historicSeries->setPointLabelsVisible(true); // 显示标签
 // historicSeries->setPointLabelsFormat("(@xPoint, @yPoint)"); // 设置标签格式
 // historicSeries->setPointLabelsColor(Qt::blue); // 设置标签颜色
 // historicSeries->setPointLabelsFont(QFont("Arial", 10)); // 设置标签字体
 
 // 创建图表
 chart->addSeries(historicSeries);
 chart->setTitle("惯性元件性能预测");
 chart->setTitleFont(QFont("黑体",14));
 
 // 设置X轴和Y轴的范围
 axisX = new QDateTimeAxis(this);
 axisX -> setTitleText("预测时间"); 	//设置轴的标题
 axisX -> setRange(datetimeNow,datetimeFuture30Days); //设置时间轴的范围,参数是两个时期时间QDateTime
 
 axisX -> setFormat("MM-dd HH:mm"); //设置刻度值的格式,和格式化时间字符串一样
 axisX -> setLabelsAngle(15);
 chart -> addAxis(axisX, Qt::AlignBottom); //添加轴
 
 axisY = new QValueAxis(this);
 axisY->setMin(-1);
 axisY->setMax(1);
 axisY->setRange(-0.1, 0.1);
 axisY->setTickAnchor(0.1);
 axisY->setTickInterval(0.01);
 axisY->setTickType(QValueAxis::TicksDynamic);
 axisY->setTitleText("误差值");
 chart->addAxis(axisY, Qt::AlignLeft);
 
 historicSeries->attachAxis(axisX);
 historicSeries->attachAxis(axisY);
 
 ui->chart_trend->setChart(chart);
 
 //生成默认数据,将从数据库提取
 listHistoric.clear();
 for(int i=1;i<30;i++){
 // 生成 [0, 1) 范围内的随机数
 double randomValue = QRandomGenerator::global()->generateDouble()*0.05-0.01;
 listHistoric.append(QPointF(QDateTime::currentDateTime().addDays(i).toMSecsSinceEpoch(), randomValue));
 }
 
 historicSeries->clear();
 historicSeries->append(listHistoric);
 
 }
 
 void WindowTrend_INS::on_pushButton_eva_trend_clicked()
 {
 // 计算趋势线
 if(!chart->series().contains(trendSeries)){
 double slope,intercept;
 trendSeries = calculateTrendLine(listHistoric,slope,intercept);
 trendSeries->setPen(QPen(QBrush(Qt::red),2,Qt::DotLine));
 trendSeries->setName("趋势");
 trendSeries->setPointLabelsVisible(true);
 chart->addSeries(trendSeries);
 trendSeries->attachAxis(axisX);
 trendSeries->attachAxis(axisY);
 }
 
 //计算预测数据
 if(!chart->series().contains(predictSeries)){
 predictSeries = new QSplineSeries();
 predictSeries->setPen(QPen(QBrush(Qt::green),2,Qt::DashDotDotLine));
 predictSeries->setName("预测数据");
 predictSeries->setPointLabelsVisible(true);
 chart->addSeries(predictSeries);
 predictSeries->attachAxis(axisX);
 predictSeries->attachAxis(axisY);
 
 //强调一下连接点joint
 listPredict.append(listHistoric.last());
 listPredict.append(listHistoric.last());
 listPredict.append(listHistoric.last());
 listPredict.append(listHistoric.last());
 listPredict.append(listHistoric.last());
 
 for(int i=1;i<30;i++){
 // 生成 [0, 1) 范围内的随机数
 double randomValue = QRandomGenerator::global()->generateDouble()*0.05-0.01;
 // listPredict.append(QPointF(QDateTime::currentDateTime().addDays(i).toMSecsSinceEpoch(), randomValue));
 
 QPointF p = QPointF(QDateTime::fromMSecsSinceEpoch(listHistoric.last().x()).addDays(i).toMSecsSinceEpoch(),
 randomValue);
 
 qDebug()<<""<< p;
 listPredict.append(p);
 
 }
 
 predictSeries->clear();
 predictSeries->append(listPredict);
 
 //延长x轴
 datetimeFuture30Days = datetimeFuture30Days.addDays(30);
 axisX -> setRange(datetimeNow,datetimeFuture30Days); //设置时间轴的范围,参数是两个时期时间QDateTime
 
 }
 
 }
 
 |