#include "statusstrip.h" #include "appcontext.h" #include "udpcommunication.h" #include #include #include #include "global.h" StatusStrip::StatusStrip(AppContext* ctx, QWidget* parent) : QWidget(parent), m_ctx(ctx) { setObjectName("StatusStrip"); setFixedHeight(94); setStyleSheet(QString("QWidget#StatusStrip{background-color:%1;border-top:1px solid %2;}") .arg(C::PANEL, C::BORDER)); QHBoxLayout* lay = new QHBoxLayout(this); lay->setContentsMargins(36, 0, 24, 0); lay->setSpacing(48); auto makeVal = [this](const QString& label) { QLabel* l = new QLabel(this); l->setStyleSheet(QString("color:%1;font-size:22px;").arg(C::TEXT_SUB)); l->setProperty("label", label); return l; }; m_battery = makeVal("底盘电量"); m_voltage = makeVal("底盘电压"); m_levelA = makeVal("清水液位"); m_levelFoam = makeVal("泡沫液位"); lay->addWidget(m_battery); lay->addWidget(m_voltage); lay->addWidget(m_levelA); lay->addWidget(m_levelFoam); lay->addStretch(1); // 模式徽标(点击可切换行车/机械臂模式,模拟面板机械旋钮) m_mode = new QPushButton("行车模式", this); m_mode->setFixedSize(180, 48); m_mode->setStyleSheet(QString("background-color:%1;color:#FFFFFF;border-radius:8px;font-size:24px;font-weight:700;border:none;") .arg(C::SUCCESS)); m_mode->setCursor(Qt::PointingHandCursor); connect(m_mode, &QPushButton::clicked, this, [this]() { Mode next = (m_ctx->mode == Mode::Drive) ? Mode::Arm : Mode::Drive; m_ctx->setMode(next); }); lay->addWidget(m_mode); // 返回按钮 m_back = new QPushButton("返回", this); m_back->setFixedSize(144, 76); connect(m_back, &QPushButton::clicked, this, &StatusStrip::backClicked); lay->addWidget(m_back); connect(m_ctx->comm(), &UdpCommunication::telemetryUpdated, this, &StatusStrip::refresh); connect(m_ctx, &AppContext::modeChanged, this, [this](Mode m) { m_mode->setText(m == Mode::Drive ? "行车模式" : "机械臂模式"); m_mode->setStyleSheet(QString("background-color:%1;color:#FFFFFF;border-radius:8px;font-size:24px;font-weight:700;") .arg(m == Mode::Drive ? C::SUCCESS : C::WARNING)); }); refresh(); } void StatusStrip::setBackVisible(bool visible) { m_back->setVisible(visible); } void StatusStrip::setBackEnabled(bool enabled) { m_back->setEnabled(enabled); } void StatusStrip::refresh() { const Telemetry& t = m_ctx->telemetry; m_battery->setText(QString("底盘电量:%1%").arg(t.soc)); m_voltage->setText(QString("底盘电压:%1V").arg(t.volt, 0, 'f', 0)); m_levelA->setText(QString("清水液位:%1L").arg(t.levelA, 0, 'f', 0)); m_levelFoam->setText(QString("泡沫液位:%1L").arg(t.levelFoam, 0, 'f', 0)); }