增加通讯协议

This commit is contained in:
xu
2026-10-14 09:59:42 +08:00
parent 32878a9a80
commit 950e9e6c9e
102 changed files with 5538 additions and 2679 deletions
+44 -25
View File
@@ -2,7 +2,7 @@
#include "titlebar.h"
#include "statusstrip.h"
#include "datacard.h"
#include "udpcommunication.h"
#include "car.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
@@ -21,36 +21,43 @@ JobSelectPage::JobSelectPage(AppContext* ctx, QWidget* parent)
root->addWidget(m_titleBar);
QHBoxLayout* main = new QHBoxLayout();
main->setContentsMargins(36, 20, 36, 20);
main->setSpacing(32);
main->setContentsMargins(24, 20, 24, 20);
main->setSpacing(24);
// 左侧菜单(垂直居中 + 平均分布)
// ===== 按钮统一样式(改这里即可同时调整对应的按钮)=====
// 左侧 4 个菜单按钮(字号 50px;尺寸见 addMenu 里的 setFixedSize)
const QString menuBtnStyle =
QString("QPushButton{font-size:50px;background-color:%1;color:%2;border:1px solid %3;border-radius:12px;}"
"QPushButton:hover,QPushButton:focus{background-color:%4;color:#FFFFFF;border:2px solid #8ABFFF;}")
.arg(C::PANEL_HI, C::TEXT, C::BORDER, C::PRIMARY);
// 右侧动作按钮(字号 55px;尺寸见下方各自的 setFixedSize)
const QString actionBtnStyle = "QPushButton{font-size:55px;}";
// 左侧菜单(按钮在列内水平居中、垂直整体居中,选中发亮)
QWidget* left = new QWidget(this);
QVBoxLayout* leftLay = new QVBoxLayout(left);
leftLay->setContentsMargins(0, 0, 0, 0);
leftLay->setSpacing(8);
leftLay->setContentsMargins(10, 20, 10, 20);
leftLay->setSpacing(100);
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));
b->setFixedSize(260, 100); // 固定尺寸(改这里同时调整 4 个菜单按钮)
b->setStyleSheet(menuBtnStyle);
connect(b, &QPushButton::clicked, this, [this, id]() { emit navigate(id); });
leftLay->addStretch(1);
leftLay->addWidget(b);
leftLay->addWidget(b, 0, Qt::AlignHCenter); // 不占拉伸因子,余量交给上下 stretch 均分
};
leftLay->addStretch(1);
addMenu("机器人底盘", PageChassis);
addMenu("机械臂", PageArm);
addMenu("气体检测仪", PageGas);
addMenu("调试维护", PageDebug);
addMenu("故障查询", PageFault);
leftLay->addStretch(1);
left->setFixedWidth(240);
left->setFixedWidth(300);
main->addWidget(left);
// 中央卡片区(2×2)
QWidget* center = new QWidget(this);
QGridLayout* grid = new QGridLayout(center);
grid->setSpacing(16);
grid->setSpacing(24);
grid->setContentsMargins(0, 0, 0, 0);
m_chassisCard = new DataCard("底盘", center);
@@ -70,27 +77,38 @@ JobSelectPage::JobSelectPage(AppContext* ctx, QWidget* parent)
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_washCard, 0, 1);
grid->addWidget(m_armCard, 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);
rightLay->setSpacing(24);
QPushButton* clean = button("消除作业", "", right);
clean->setFixedSize(240, 100);
clean->setStyleSheet(actionBtnStyle);
connect(clean, &QPushButton::clicked, this, [this]() { emit navigate(PageClean); });
QPushButton* disinfect = button("手动消毒", "primary", right);
disinfect->setFixedHeight(170);
QPushButton* disinfect = button("消毒作业", "", right);
disinfect->setFixedSize(240, 100);
disinfect->setStyleSheet(actionBtnStyle);
connect(disinfect, &QPushButton::clicked, this, [this]() { emit navigate(PageDisinfect); });
// 返回:回系统首页面(⑤系统首页面 → ⑥作业选择)
QPushButton* back = button("返回", "", right);
back->setFixedSize(240, 100);
back->setStyleSheet(cancelButtonStyle(55)); // 选中(悬停/按下/焦点)红底白字
// connect(back, &QPushButton::clicked, this, [this]() { emit navigate(PageSelfCheck); }); // 原:回自检页
connect(back, &QPushButton::clicked, this, [this]() { emit navigate(PageHome); });
rightLay->addStretch(1);
rightLay->addWidget(clean);
rightLay->addWidget(clean, 0, Qt::AlignHCenter);
rightLay->addStretch(1);
rightLay->addWidget(disinfect);
rightLay->addWidget(disinfect, 0, Qt::AlignHCenter);
rightLay->addStretch(1);
rightLay->addWidget(back, 0, Qt::AlignHCenter);
rightLay->addStretch(1);
right->setFixedWidth(360);
main->addWidget(right);
@@ -99,9 +117,10 @@ JobSelectPage::JobSelectPage(AppContext* ctx, QWidget* parent)
m_statusStrip = new StatusStrip(ctx, this);
m_statusStrip->setBackVisible(false);
m_statusStrip->setModeVisible(false); // 本页不显示模式徽标(返回按钮已移到右侧列)
root->addWidget(m_statusStrip);
connect(ctx->comm(), &UdpCommunication::telemetryUpdated, this, &JobSelectPage::refresh);
connect(ctx->comm(), &CarCommunication::telemetryUpdated, this, &JobSelectPage::refresh);
refresh();
}