BatteryMonitor/chartpaint.cpp

73 lines
3.3 KiB
C++
Raw Permalink Normal View History

2024-10-31 16:48:38 +08:00
#include "chartpaint.h"
#include <QFont>
ChartPaint::ChartPaint(QWidget *parent): QWidget{parent}
{
}
QChartView *ChartPaint::Paint(QString type, int dataArray[])
{
// 创建柱状集合
QBarSet *set0 = new QBarSet("电量"); // 创建第一个柱状集合
QBarSet *set1 = new QBarSet("时间"); // 创建第二个柱状集合
*set0 << dataArray[0] << dataArray[1]; // 电量集合--累计充--累计放--日充--日放
*set1 << dataArray[2] << dataArray[3]; // 时间集合--累计充--累计放--日充--日放
// 创建柱状系列
QBarSeries *series0 = new QBarSeries(); // 创建第一个柱状系列
series0->append(set0); // 将第一个集合添加到第一个系列
series0->setLabelsVisible(true);
series0->setBarWidth(0.3);
// series0->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);
QBarSeries *series1 = new QBarSeries(); // 创建第二个柱状系列
series1->append(set1); // 将第二个集合添加到第二个系列
series1->setLabelsVisible(true);
series1->setBarWidth(0.3);
// series1->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);
// 创建图表
QChart *chart = new QChart(); // 创建图表对象
chart->addSeries(series0); // 将第一个系列添加到图表
chart->addSeries(series1); // 将第二个系列添加到图表
chart->setTitle(type + "充放电电量和时间柱状图"); // 设置图表标题
chart->setTitleFont(QFont("微软雅黑", 10, QFont::Bold));
// chart->setBackgroundBrush(QBrush(Qt::lightGray));
// 创建X轴
QBarCategoryAxis *axisX = new QBarCategoryAxis(); // 创建X轴
axisX->append(QStringList() << type + "" << type + ""); // 设置X轴的类别
chart->addAxis(axisX, Qt::AlignBottom); // 将X轴添加到图表底部
series0->attachAxis(axisX); // 将X轴附加到第一个系列
series1->attachAxis(axisX); // 将X轴附加到第二个系列
axisX->setLabelsFont(QFont("微软雅黑", 10, QFont::Bold));
// 创建第一个Y轴
QValueAxis *axisY1 = new QValueAxis(); // 创建第一个Y轴
axisY1->setRange(0, (std::max(dataArray[0], dataArray[1])) * 1.1); // 设置Y轴的范围
axisY1->setLabelFormat("%i"); // 设置Y轴标签格式
axisY1->setLabelsFont(QFont("微软雅黑", 10, QFont::Bold));
axisY1->setTitleText(type + "充放电量(kWh)"); // 设置Y轴标题
chart->addAxis(axisY1, Qt::AlignLeft); // 将第一个Y轴添加到图表左侧
series0->attachAxis(axisY1); // 将第一个系列附加到第一个Y轴
// 创建第二个Y轴
QValueAxis *axisY2 = new QValueAxis(); // 创建第二个Y轴
axisY2->setRange(0, (std::max(dataArray[2], dataArray[3])) * 1.2); // 设置Y轴的范围
axisY2->setLabelFormat("%i"); // 设置Y轴标签格式
axisY2->setLabelsFont(QFont("微软雅黑", 10, QFont::Bold));
axisY2->setTitleText(type + "充放时间(小时)"); // 设置Y轴标题
chart->addAxis(axisY2, Qt::AlignRight); // 将第二个Y轴添加到图表右侧
series1->attachAxis(axisY2); // 将第二个系列附加到第二个Y轴
// 创建图表视图
QChartView *chartView = new QChartView(chart); // 创建图表视图对象
chartView->setRenderHint(QPainter::Antialiasing); // 设置抗锯齿渲染
return chartView;
}