| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #include "statswidget.h"
- #include <QDebug>
- StatsWidget::StatsWidget(QWidget *parent)
- : QWidget(parent)
- , m_statsGroup(nullptr)
- , m_totalCountLabel(nullptr)
- , m_type0CountLabel(nullptr)
- , m_type1CountLabel(nullptr)
- , m_type2CountLabel(nullptr)
- , m_lastUpdateLabel(nullptr)
- , m_totalCount(0)
- , m_type0Count(0)
- , m_type1Count(0)
- , m_type2Count(0)
- {
- setupUI();
- applyStyles();
- }
- StatsWidget::~StatsWidget()
- {
- }
- void StatsWidget::setupUI()
- {
- // 创建主布局
- QVBoxLayout *mainLayout = new QVBoxLayout(this);
- mainLayout->setContentsMargins(5, 5, 5, 5);
- mainLayout->setSpacing(5);
- // 创建统计信息组
- m_statsGroup = new QGroupBox("消息统计", this);
- QVBoxLayout *statsLayout = new QVBoxLayout(m_statsGroup);
- statsLayout->setContentsMargins(10, 10, 10, 10);
- statsLayout->setSpacing(8);
- // 总消息数
- m_totalCountLabel = new QLabel("总消息数: 0", this);
- m_totalCountLabel->setObjectName("totalCountLabel");
- statsLayout->addWidget(m_totalCountLabel);
- // 创建消息类型统计的水平布局
- QHBoxLayout *typeLayout = new QHBoxLayout();
- typeLayout->setSpacing(15);
- // 类型0消息数
- m_type0CountLabel = new QLabel("类型0: 0", this);
- m_type0CountLabel->setObjectName("type0CountLabel");
- typeLayout->addWidget(m_type0CountLabel);
- // 类型1消息数
- m_type1CountLabel = new QLabel("类型1: 0", this);
- m_type1CountLabel->setObjectName("type1CountLabel");
- typeLayout->addWidget(m_type1CountLabel);
- // 类型2消息数
- m_type2CountLabel = new QLabel("类型2: 0", this);
- m_type2CountLabel->setObjectName("type2CountLabel");
- typeLayout->addWidget(m_type2CountLabel);
- statsLayout->addLayout(typeLayout);
- // 最后更新时间
- m_lastUpdateLabel = new QLabel("最后更新: --", this);
- m_lastUpdateLabel->setObjectName("lastUpdateLabel");
- statsLayout->addWidget(m_lastUpdateLabel);
- // 添加到主布局
- mainLayout->addWidget(m_statsGroup);
- mainLayout->addStretch();
- setLayout(mainLayout);
- setMaximumHeight(150);
- }
- void StatsWidget::applyStyles()
- {
- setStyleSheet(
- "QGroupBox {"
- " font-weight: bold;"
- " border: 2px solid #cccccc;"
- " border-radius: 5px;"
- " margin-top: 1ex;"
- " padding-top: 5px;"
- "}"
- "QGroupBox::title {"
- " subcontrol-origin: margin;"
- " left: 10px;"
- " padding: 0 5px 0 5px;"
- "}"
- "#totalCountLabel {"
- " font-weight: bold;"
- " color: #2c3e50;"
- " font-size: 14px;"
- "}"
- "#type0CountLabel, #type1CountLabel, #type2CountLabel {"
- " color: #34495e;"
- " font-size: 12px;"
- "}"
- "#lastUpdateLabel {"
- " color: #7f8c8d;"
- " font-size: 11px;"
- "}"
- );
- }
- void StatsWidget::updateStats(const QJsonObject& statsData)
- {
- qDebug() << "[StatsWidget] 收到统计更新:" << statsData;
-
- // 解析data数组并累加所有用户的统计数据
- if (statsData.contains("data") && statsData["data"].isArray()) {
- QJsonArray dataArray = statsData["data"].toArray();
-
- // 重置累计数据
- m_totalCount = 0;
- m_type0Count = 0;
- m_type1Count = 0;
- m_type2Count = 0;
- QDateTime latestUpdate;
-
- // 遍历所有用户数据进行累加
- for (const QJsonValue& value : dataArray) {
- if (value.isObject()) {
- QJsonObject userStats = value.toObject();
-
- // 累加各类型消息数
- m_totalCount += userStats["totalCount"].toInt();
- m_type0Count += userStats["type0Count"].toInt();
- m_type1Count += userStats["type1Count"].toInt();
- m_type2Count += userStats["type2Count"].toInt();
-
- // 找到最新的更新时间
- QString lastUpdateStr = userStats["lastUpdate"].toString();
- QDateTime userUpdate = QDateTime::fromString(lastUpdateStr, Qt::ISODate);
- if (userUpdate.isValid() && (!latestUpdate.isValid() || userUpdate > latestUpdate)) {
- latestUpdate = userUpdate;
- }
- }
- }
-
- m_lastUpdate = latestUpdate;
-
- // 更新UI显示
- m_totalCountLabel->setText(QString("总消息数: %1").arg(m_totalCount));
- m_type0CountLabel->setText(QString("类型0: %1").arg(m_type0Count));
- m_type1CountLabel->setText(QString("类型1: %1").arg(m_type1Count));
- m_type2CountLabel->setText(QString("类型2: %1").arg(m_type2Count));
-
- if (m_lastUpdate.isValid()) {
- m_lastUpdateLabel->setText(QString("最后更新: %1")
- .arg(m_lastUpdate.toString("yyyy-MM-dd hh:mm:ss")));
- } else {
- m_lastUpdateLabel->setText("最后更新: --");
- }
-
- qDebug() << "[StatsWidget] 全局统计信息已更新 - 总数:" << m_totalCount
- << "类型0:" << m_type0Count << "类型1:" << m_type1Count
- << "类型2:" << m_type2Count << "用户数:" << dataArray.size();
- }
- }
|