#include "homepage.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "backendapimanager.h" #include "ui_homepage.h" Homepage::Homepage(QWidget *parent) : QWidget(parent), ui(new Ui::homepage) { ui->setupUi(this); QJsonArray dailyCount; dailyCount = backendAPIManager::getDailyBlastedCount(15); QDate today = QDate::currentDate(); QString dateTodayStr = QDate::currentDate().toString("yyyy-MM-dd"); QList> data; // 根据today,倒退15天,检查dailyCount中date是否和日期匹配,如果匹配设置数据,不匹配则设置0 for (int i = 0; i < 15; ++i) { QDate date = today.addDays(-i); QString dateStr = date.toString("yyyy-MM-dd"); bool found = false; if (dailyCount[0].toObject().value("blast_at").toString() == dateStr) { if (dateStr == dateTodayStr) { m_todayCount = dailyCount[0].toObject().value("count").toInt(); } data.append(qMakePair(date, dailyCount[0].toObject().value("count").toInt())); dailyCount.removeFirst(); // 移除已处理的元素 } else { data.append(qMakePair(date, 0)); } } draw(data); } Homepage::~Homepage() { delete ui; } void Homepage::draw(QList> data) { // 2. Bar Set and Series QBarSet *set = new QBarSet(""); QStringList categories; int totalCount = 0; for (const auto &entry : data) { *set << entry.second; categories << entry.first.toString("MM-dd"); totalCount += entry.second; } if (totalCount == 0) { set->setLabel("无爆破数据"); } else { set->setLabel("总计: " + QString::number(totalCount)); } QBarSeries *series = new QBarSeries(); series->append(set); series->setLabelsVisible(true); // 3. Create Chart QChart *chart = new QChart(); chart->addSeries(series); chart->setTitle("近15日已上传爆破数据统计"); // 4. X-axis (Category with Dates) QBarCategoryAxis *axisX = new QBarCategoryAxis(); axisX->append(categories); axisX->setTitleText("日期"); chart->addAxis(axisX, Qt::AlignBottom); series->attachAxis(axisX); // 5. Y-axis (Count) QValueAxis *axisY = new QValueAxis(); axisY->setTitleText("数量"); axisY->setLabelFormat("%d"); chart->addAxis(axisY, Qt::AlignLeft); series->attachAxis(axisY); // 6. Show Chart QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); // Add the chart view to the widget's layout QVBoxLayout *layout = new QVBoxLayout(ui->chartWidget); layout->addWidget(chartView); ui->chartWidget->setLayout(layout); ui->todayBlastCount->display(m_todayCount); }