126 lines
4.5 KiB
C++
126 lines
4.5 KiB
C++
#include "jobselect.h"
|
||
#include "titlebar.h"
|
||
#include "statusstrip.h"
|
||
#include "datacard.h"
|
||
#include "udpcommunication.h"
|
||
#include <QVBoxLayout>
|
||
#include <QHBoxLayout>
|
||
#include <QGridLayout>
|
||
#include <QPushButton>
|
||
#include "global.h"
|
||
|
||
JobSelectPage::JobSelectPage(AppContext* ctx, QWidget* parent)
|
||
: BasePage(ctx, parent)
|
||
{
|
||
QVBoxLayout* root = new QVBoxLayout(this);
|
||
root->setContentsMargins(0, 0, 0, 0);
|
||
root->setSpacing(0);
|
||
|
||
m_titleBar = new TitleBar(ctx, this);
|
||
m_titleBar->setTitle("作业选择");
|
||
root->addWidget(m_titleBar);
|
||
|
||
QHBoxLayout* main = new QHBoxLayout();
|
||
main->setContentsMargins(36, 20, 36, 20);
|
||
main->setSpacing(32);
|
||
|
||
// 左侧菜单(垂直居中 + 平均分布)
|
||
QWidget* left = new QWidget(this);
|
||
QVBoxLayout* leftLay = new QVBoxLayout(left);
|
||
leftLay->setContentsMargins(0, 0, 0, 0);
|
||
leftLay->setSpacing(8);
|
||
auto addMenu = [&](const QString& t, PageId id) {
|
||
QPushButton* b = button(t, "", left);
|
||
b->setFixedHeight(130);
|
||
b->setStyleSheet(QString("font-size:24px;background-color:%1;color:%2;border:1px solid %3;border-radius:12px;")
|
||
.arg(C::PANEL_HI, C::TEXT, C::BORDER));
|
||
connect(b, &QPushButton::clicked, this, [this, id]() { emit navigate(id); });
|
||
leftLay->addStretch(1);
|
||
leftLay->addWidget(b);
|
||
};
|
||
addMenu("机器人底盘", PageChassis);
|
||
addMenu("机械臂", PageArm);
|
||
addMenu("气体检测仪", PageGas);
|
||
addMenu("调试维护", PageDebug);
|
||
addMenu("故障查询", PageFault);
|
||
leftLay->addStretch(1);
|
||
left->setFixedWidth(240);
|
||
main->addWidget(left);
|
||
|
||
// 中央卡片区(2×2)
|
||
QWidget* center = new QWidget(this);
|
||
QGridLayout* grid = new QGridLayout(center);
|
||
grid->setSpacing(16);
|
||
grid->setContentsMargins(0, 0, 0, 0);
|
||
|
||
m_chassisCard = new DataCard("底盘", center);
|
||
m_chassisCard->addField("电量", "85%");
|
||
m_chassisCard->addField("电压", "360V");
|
||
m_chassisCard->addField("故障", "无");
|
||
|
||
m_armCard = new DataCard("机械臂", center);
|
||
m_armCard->addField("末端位置", "XYZ");
|
||
m_armCard->addField("姿态", "RX/RY/RZ");
|
||
|
||
m_washCard = new DataCard("洗消", center);
|
||
m_washCard->addField("A液位", "100L");
|
||
m_washCard->addField("泡沫液位", "30L");
|
||
|
||
m_gasCard = new DataCard("气体检测仪", center);
|
||
m_gasCard->addField("主机状态", "待机");
|
||
m_gasCard->addField("浓度", "0 ppb");
|
||
|
||
grid->addWidget(m_chassisCard, 0, 0);
|
||
grid->addWidget(m_armCard, 0, 1);
|
||
grid->addWidget(m_washCard, 1, 0);
|
||
grid->addWidget(m_gasCard, 1, 1);
|
||
main->addWidget(center, 1);
|
||
|
||
// 右侧按钮列(垂直居中 + 平均分布)
|
||
QWidget* right = new QWidget(this);
|
||
QVBoxLayout* rightLay = new QVBoxLayout(right);
|
||
rightLay->setContentsMargins(0, 0, 0, 0);
|
||
rightLay->setSpacing(8);
|
||
QPushButton* clean = button("手动消除", "primary", right);
|
||
clean->setFixedHeight(170);
|
||
connect(clean, &QPushButton::clicked, this, [this]() { emit navigate(PageClean); });
|
||
QPushButton* disinfect = button("手动消毒", "primary", right);
|
||
disinfect->setFixedHeight(170);
|
||
connect(disinfect, &QPushButton::clicked, this, [this]() { emit navigate(PageDisinfect); });
|
||
rightLay->addStretch(1);
|
||
rightLay->addWidget(clean);
|
||
rightLay->addStretch(1);
|
||
rightLay->addWidget(disinfect);
|
||
rightLay->addStretch(1);
|
||
right->setFixedWidth(360);
|
||
main->addWidget(right);
|
||
|
||
root->addLayout(main, 1);
|
||
|
||
m_statusStrip = new StatusStrip(ctx, this);
|
||
m_statusStrip->setBackVisible(false);
|
||
root->addWidget(m_statusStrip);
|
||
|
||
connect(ctx->comm(), &UdpCommunication::telemetryUpdated, this, &JobSelectPage::refresh);
|
||
refresh();
|
||
}
|
||
|
||
void JobSelectPage::refresh()
|
||
{
|
||
const Telemetry& t = ctx()->telemetry;
|
||
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(";"));
|
||
m_chassisCard->setAlarm(2, !t.chassisFaults.isEmpty());
|
||
|
||
m_armCard->setField(0, t.pos);
|
||
m_armCard->setField(1, t.pose);
|
||
|
||
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_gasCard->setField(0, t.gasHost == "detecting" ? "检测中" : (t.gasHost == "fault" ? "故障" : "待机"));
|
||
m_gasCard->setField(1, QString("%1 ppb").arg(t.gasConc, 0, 'f', 0));
|
||
m_gasCard->setAlarm(1, t.gasConc > 500.0);
|
||
}
|