2024-11-01 17:40:37 +08:00
|
|
|
|
#include "beltspeedlinewidget.h"
|
|
|
|
|
|
|
|
|
|
#include <QDateTimeAxis>
|
2024-11-04 18:11:55 +08:00
|
|
|
|
#include <QRandomGenerator>
|
2024-11-01 17:40:37 +08:00
|
|
|
|
#include <QVBoxLayout>
|
|
|
|
|
|
|
|
|
|
BeltSpeedLineWidget::BeltSpeedLineWidget(QWidget* parent)
|
|
|
|
|
: QWidget(parent)
|
|
|
|
|
{
|
|
|
|
|
initLineChart();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void BeltSpeedLineWidget::initLineChart()
|
|
|
|
|
{
|
|
|
|
|
// 创建图表视图
|
|
|
|
|
m_chartView = new QChartView(this);
|
|
|
|
|
|
|
|
|
|
m_chartView->setBackgroundBrush(Qt::transparent);
|
|
|
|
|
m_chartView->setStyleSheet("background: transparent;"); // 使用样式表确保透明
|
|
|
|
|
m_chartView->setRenderHint(QPainter::Antialiasing);
|
|
|
|
|
m_chartView->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
|
|
|
|
|
|
|
|
|
|
m_chart = new QChart();
|
|
|
|
|
m_chart->setBackgroundBrush(Qt::transparent);
|
|
|
|
|
m_chart->setMargins(QMargins(0, 0, 0, 0));
|
2024-11-04 18:11:55 +08:00
|
|
|
|
m_chart->legend()->hide();
|
2024-11-01 17:40:37 +08:00
|
|
|
|
|
|
|
|
|
// 创建折线系列
|
|
|
|
|
m_series = new QLineSeries();
|
|
|
|
|
m_series->setPointsVisible(false); // 隐藏数据点的标记
|
|
|
|
|
// m_series->setMarkerShape(QLineSeries::MarkerShapeNone); // 隐藏标记形状
|
|
|
|
|
|
|
|
|
|
// 将系列添加到图表
|
|
|
|
|
m_chart->addSeries(m_series);
|
|
|
|
|
m_chart->createDefaultAxes();
|
|
|
|
|
|
2024-11-04 18:11:55 +08:00
|
|
|
|
// TODO:假设数据点,替换为你的实时数据
|
2024-11-01 17:40:37 +08:00
|
|
|
|
QDateTime currentTime = QDateTime::currentDateTime();
|
2024-11-04 18:11:55 +08:00
|
|
|
|
QRandomGenerator* generator = QRandomGenerator::global();
|
|
|
|
|
double previousSpeed = 10.0; // 初始速度值在中间
|
2024-11-01 17:40:37 +08:00
|
|
|
|
for (int i = 0; i < 120; ++i) { // 120个数据点,代表最近两个小时
|
2024-11-04 18:11:55 +08:00
|
|
|
|
// 根据前一个速度值生成新的速度值,保持在5到15之间
|
|
|
|
|
double fluctuation = generator->generateDouble() * 2.0 - 1.0; // 生成 -1.0 到 1.0 之间的浮动 // 小范围波动
|
|
|
|
|
double speed = previousSpeed + fluctuation;
|
|
|
|
|
|
|
|
|
|
// 确保速度在5到15之间
|
|
|
|
|
if (speed < 5.0) {
|
|
|
|
|
speed = 5.0;
|
|
|
|
|
} else if (speed > 15.0) {
|
|
|
|
|
speed = 15.0;
|
|
|
|
|
}
|
|
|
|
|
|
2024-11-01 17:40:37 +08:00
|
|
|
|
m_series->append(currentTime.addSecs(-i * 60).toMSecsSinceEpoch(), speed);
|
2024-11-04 18:11:55 +08:00
|
|
|
|
previousSpeed = speed; // 更新前一个速度值
|
2024-11-01 17:40:37 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建并设置X轴为日期时间轴
|
|
|
|
|
QDateTimeAxis* xAxis = new QDateTimeAxis();
|
|
|
|
|
xAxis->setFormat("hh:mm:ss");
|
|
|
|
|
xAxis->setRange(currentTime.addSecs(-7200), currentTime); // 设置范围为最近两个小时
|
|
|
|
|
xAxis->setLinePen(QPen(Qt::gray));
|
|
|
|
|
xAxis->setLabelsColor(Qt::gray);
|
|
|
|
|
m_chart->setAxisX(xAxis, m_series); // 将X轴应用到数据系列
|
|
|
|
|
|
|
|
|
|
// 设置Y轴范围
|
|
|
|
|
m_chart->axisY()->setRange(0, 20);
|
|
|
|
|
m_chart->axisY()->setTitleText("速度 (m/s)");
|
|
|
|
|
|
|
|
|
|
m_chart->axisY()->setTitleBrush(QBrush(Qt::gray));
|
|
|
|
|
m_chart->axisY()->setLinePen(QPen(Qt::gray));
|
|
|
|
|
m_chart->axisY()->setLabelsColor(Qt::gray);
|
|
|
|
|
|
|
|
|
|
// 设置图表到视图并将视图设置为中心部件
|
|
|
|
|
m_chartView->setChart(m_chart);
|
|
|
|
|
|
|
|
|
|
QVBoxLayout* layout = new QVBoxLayout(this);
|
|
|
|
|
layout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
layout->setSpacing(0); // 设置间距为0
|
|
|
|
|
layout->addWidget(m_chartView);
|
|
|
|
|
setLayout(layout);
|
|
|
|
|
}
|