新版布局

This commit is contained in:
xu
2026-10-16 09:06:03 +08:00
parent e5efdea06e
commit 1ec93e42cb
37 changed files with 1785 additions and 977 deletions
+30 -25
View File
@@ -25,36 +25,36 @@ GasDetectorPage::GasDetectorPage(AppContext* ctx, QWidget* parent)
main->setContentsMargins(36, 16, 36, 16);
main->setSpacing(32);
// 中央卡片区(2×2)
// 中央卡片区:左列 底盘/洗消/机械臂 纵向排列,右列由气体检测仪独占并跨满三行
QWidget* center = new QWidget(this);
QGridLayout* grid = new QGridLayout(center);
grid->setSpacing(20);
grid->setContentsMargins(20, 0, 20, 0);
m_chassisCard = new DataCard("底盘", center);
m_chassisCard->addField("电量", "85%");
m_chassisCard->addField("电压", "360V");
m_chassisCard->addField("故障", "无");
m_chassisCard->addField("电量", "--");
m_chassisCard->addField("电压", "--");
m_washCard = new DataCard("洗消", center);
m_washCard->addField("A液位", "100L");
m_washCard->addField("泡沫液位", "30L");
m_washCard->addField("A液位", "--");
m_washCard->addField("泡沫液位", "--");
m_armCard = new DataCard("机械臂", center);
m_armCard->addField("末端位置", "XYZ");
m_armCard->addField("姿态", "RX/RY/RZ");
m_armCard->addField("末端位置", "--");
m_armCard->addField("姿态", "--");
m_gasCard = new DataCard("气体检测仪", center);
m_gasCard->addField("主机状态", "待机");
m_gasCard->addField("主机状态", "--");
m_gasCard->addField("有毒物种类", "--");
m_gasCard->addField("有毒物等级", "--");
m_gasConcField = m_gasCard->addField("浓度", "0 ppb", true);
m_gasConcField = m_gasCard->addField("浓度", "--", true);
m_gasCard->setHighlight(true); // 主色描边突出
grid->addWidget(m_chassisCard, 0, 0);
grid->addWidget(m_washCard, 0, 1);
grid->addWidget(m_gasCard, 1, 0);
grid->addWidget(m_armCard, 1, 1);
grid->addWidget(m_washCard, 1, 0);
grid->addWidget(m_armCard, 2, 0);
// 本页主角,独占右列:跨 3 行填满
grid->addWidget(m_gasCard, 0, 1, 3, 1);
main->addWidget(center, 1);
// 右侧按钮列(垂直居中 + 平均分布)
@@ -90,7 +90,6 @@ GasDetectorPage::GasDetectorPage(AppContext* ctx, QWidget* parent)
root->addLayout(main, 1);
m_statusStrip = new StatusStrip(ctx, this);
m_statusStrip->setModeVisible(false); // 本页不显示模式徽标
connect(m_statusStrip, &StatusStrip::backClicked, this, [this]() {
if (this->ctx()->gasRunning) {
if (ConfirmDialog::confirm(this, "提示", "检测仍在进行,是否退出?"))
@@ -117,24 +116,30 @@ void GasDetectorPage::refresh()
{
const Telemetry& t = ctx()->telemetry;
// 同步运行状态(以遥测为准)
if (t.gasHost == "detecting") ctx()->gasRunning = true;
else if (t.gasHost == "standby") ctx()->gasRunning = false;
// 同步运行状态(以遥测为准):未收到报文(gasHost 为空)时按未运行处理
ctx()->gasRunning = (t.gasHost == "detecting");
updateGating();
m_chassisCard->setField(0, QString("%1%").arg(t.soc));
m_chassisCard->setField(1, QString("%1V").arg(t.volt, 0, 'f', 0));
m_chassisCard->setField(2, t.chassisFaults.isEmpty() ? "无" : t.chassisFaults.join(";"));
// 未收到对应报文的数值统一显示 "--"(dashIf)
m_chassisCard->setField(0, dashIf(t.hasBattery, QString("%1%").arg(t.soc)));
m_chassisCard->setField(1, dashIf(t.hasBattery, QString("%1V").arg(t.volt, 0, 'f', 0)));
m_chassisCard->setFaults(t.chassisFaults);
m_washCard->setField(0, dashIf(t.hasWash, QString("%1L").arg(t.levelA, 0, 'f', 0)));
m_washCard->setField(1, dashIf(t.hasWash, QString("%1L").arg(t.levelFoam, 0, 'f', 0)));
m_washCard->setAlarm(0, t.levelALow);
m_washCard->setAlarm(1, t.levelBLow);
m_washCard->setFaults(washCardFaults(t));
m_washCard->setField(0, QString("%1L").arg(t.levelA, 0, 'f', 0));
m_washCard->setField(1, QString("%1L").arg(t.levelFoam, 0, 'f', 0));
m_armCard->setField(0, t.pos);
m_armCard->setField(1, t.pose);
m_gasCard->setField(0, t.gasHost == "detecting" ? "检测中" : (t.gasHost == "fault" ? "故障" : "待机"));
m_gasCard->setField(0, gasHostLabel(t));
m_gasCard->setField(1, t.gasType);
m_gasCard->setField(2, t.gasLevel);
m_gasCard->setField(m_gasConcField, QString("%1 ppb").arg(t.gasConc, 0, 'f', 0));
// 超阈值红闪
m_gasCard->setField(m_gasConcField, dashIf(t.hasGasConc, QString("%1 ppb").arg(t.gasConc, 0, 'f', 0)));
// 主机状态为“故障”与浓度超限是两回事,各自独立闪
m_gasCard->setAlarm(0, t.gasHost == "fault");
m_gasCard->setAlarm(m_gasConcField, t.gasConc > 500.0);
m_gasCard->setFaults(t.detectorFaults);
}