#include "chartpaint.h" #include 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; }