feat:初始化wuhan_QT界面代码

This commit is contained in:
xu
2026-09-09 17:00:37 +08:00
commit 40473ad10b
537 changed files with 23934 additions and 0 deletions
+123
View File
@@ -0,0 +1,123 @@
#include "mainwindow.h"
#include "appcontext.h"
#include "udpcommunication.h"
#include "confirmdialog.h"
#include "basepage.h"
#include "bootpasswordpage.h"
#include "warningpage.h"
#include "passwordmgmtloginpage.h"
#include "passwordmgmtpage.h"
#include "passwordresetpage.h"
#include "selfcheckpage.h"
#include "jobselectpage.h"
#include "chassispage.h"
#include "armpage.h"
#include "gasdetectorpage.h"
#include "manualcleanpage.h"
#include "manualdisinfectpage.h"
#include "debugmaintainpage.h"
#include "faultquerypage.h"
#include <QStackedWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QKeyEvent>
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
{
m_ctx = AppContext::instance();
setWindowTitle("玉兔工业无线遥控器 YTZT6K8EART2-aL25");
setWindowFlags(Qt::FramelessWindowHint | Qt::Window);
setFixedSize(SCREEN_W, SCREEN_H);
// 中央堆栈
m_stack = new QStackedWidget(this);
m_stack->setObjectName("StackedWidget");
setCentralWidget(m_stack);
buildPages();
// 全局急停横幅(覆盖于页面之上)
m_estopBanner = new QLabel("急停已触发,请复位", this);
m_estopBanner->setAlignment(Qt::AlignCenter);
m_estopBanner->setStyleSheet(
"background-color:#E5484D;color:#FFFFFF;font-size:30px;font-weight:700;");
m_estopBanner->setGeometry(0, 98, SCREEN_W, 64);
m_estopBanner->hide();
connect(m_ctx, &AppContext::estopChanged, this, &MainWindow::onEstopChanged);
// 启动通信层(UDP 收包发包)
m_ctx->comm()->start();
// 初始页面:开机密码
m_stack->setCurrentIndex(PageBoot);
}
MainWindow::~MainWindow()
{
}
void MainWindow::buildPages()
{
m_pages.fill(nullptr, PageCount);
auto add = [this](PageId id, BasePage* p) {
m_pages[id] = p;
m_stack->addWidget(p);
connect(p, &BasePage::navigate, this, &MainWindow::onNavigate);
};
add(PageBoot, new BootPasswordPage(m_ctx));
add(PageWarning, new WarningPage(m_ctx));
add(PageMgmtLogin, new PasswordMgmtLoginPage(m_ctx));
add(PageMgmt, new PasswordMgmtPage(m_ctx));
add(PageReset, new PasswordResetPage(m_ctx));
add(PageSelfCheck, new SelfCheckPage(m_ctx));
add(PageJob, new JobSelectPage(m_ctx));
add(PageChassis, new ChassisPage(m_ctx));
add(PageArm, new ArmPage(m_ctx));
add(PageGas, new GasDetectorPage(m_ctx));
add(PageClean, new ManualCleanPage(m_ctx));
add(PageDisinfect, new ManualDisinfectPage(m_ctx));
add(PageDebug, new DebugMaintainPage(m_ctx));
add(PageFault, new FaultQueryPage(m_ctx));
m_faultPage = qobject_cast<FaultQueryPage*>(page(PageFault));
}
void MainWindow::onNavigate(PageId id)
{
// 记录故障查询返回来源
if (id == PageFault && m_faultPage) {
PageId cur = static_cast<PageId>(m_stack->currentIndex());
m_faultPage->setReturnPage((cur == PageSelfCheck) ? PageSelfCheck : PageJob);
}
if (id >= 0 && id < PageCount)
m_stack->setCurrentIndex(id);
}
void MainWindow::onEstopChanged(bool triggered)
{
m_estopBanner->setVisible(triggered);
m_estopBanner->raise();
}
void MainWindow::keyPressEvent(QKeyEvent* ev)
{
// 演示用快捷键:M 切换行车/机械臂模式,E 触发/复位急停
switch (ev->key()) {
case Qt::Key_M:
m_ctx->setMode(m_ctx->mode == Mode::Drive ? Mode::Arm : Mode::Drive);
break;
case Qt::Key_E:
if (m_ctx->estopTriggered) m_ctx->resetEstop();
else m_ctx->triggerEstop();
break;
default:
QMainWindow::keyPressEvent(ev);
}
}