123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #include "homepage.h"
- #include <QDate>
- #include <QJsonArray>
- #include <QJsonDocument>
- #include <QJsonObject>
- #include <QList>
- #include <QPainter>
- #include <QPair>
- #include <QtCharts/QBarCategoryAxis>
- #include <QtCharts/QBarSeries>
- #include <QtCharts/QBarSet>
- #include <QtCharts/QChart>
- #include <QtCharts/QChartView>
- #include <QtCharts/QValueAxis>
- #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<QPair<QDate, int>> 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<QPair<QDate, int>> 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);
- }
|