无人狗前端界面完善

main
huaijin 1 week ago
parent 7d2e906199
commit d446c2d177

@ -29,6 +29,7 @@ SOURCES += \
src/core/database/DatabaseHelper.cpp \
src/ui/main/MainWindow.cpp \
src/ui/dialogs/DeviceDialog.cpp \
src/ui/dialogs/RobotDogControlDialog.cpp \
src/ui/components/DeviceCard.cpp \
src/ui/components/DeviceListPanel.cpp \
src/ui/components/SystemLogPanel.cpp \
@ -47,6 +48,7 @@ HEADERS += \
include/core/database/DatabaseHelper.h \
include/ui/main/MainWindow.h \
include/ui/dialogs/DeviceDialog.h \
include/ui/dialogs/RobotDogControlDialog.h \
include/ui/components/DeviceCard.h \
include/ui/components/DeviceListPanel.h \
include/ui/components/SystemLogPanel.h \

@ -34,6 +34,11 @@
#include <QCheckBox>
#include <QTimer>
#include <QFrame>
#include <QProcess>
#include <QWidget>
#include <QWindow>
#include <QApplication>
#include <QStackedLayout>
/**
* @class RobotDogControlDialog
@ -59,44 +64,34 @@ public:
signals:
/**
* @brief
* @brief
*/
void startMapping();
void startSlamRadar();
/**
* @brief
* @brief
*/
void stopMapping();
void stopSlamRadar();
/**
* @brief
* @brief
*/
void startNavigation();
void startRadarMapping();
/**
* @brief
* @brief
*/
void stopNavigation();
void stopRadarMapping();
/**
* @brief
* @brief
*/
void startPhotoTransmission();
void startAutoNavMapping();
/**
* @brief
* @brief
*/
void stopPhotoTransmission();
/**
* @brief
*/
void startPersonRecognition();
/**
* @brief
*/
void stopPersonRecognition();
void stopAutoNavMapping();
public slots:
/**
@ -149,29 +144,24 @@ private slots:
void onJumpClicked();
/**
* @brief
*/
void onMappingToggle();
/**
* @brief
* @brief
*/
void onNavigationToggle();
void onEmergencyStop();
/**
* @brief
* @brief
*/
void onPhotoTransmissionToggle();
void onSlamRadarToggle();
/**
* @brief
* @brief
*/
void onPersonRecognitionToggle();
void onRadarMappingToggle();
/**
* @brief
* @brief
*/
void onEmergencyStop();
void onAutoNavMappingToggle();
private:
/**
@ -224,12 +214,14 @@ private:
// 任务控制模块
QGroupBox *m_missionControlGroup;
QPushButton *m_mappingBtn;
QPushButton *m_navigationBtn;
QPushButton *m_photoBtn;
QPushButton *m_recognitionBtn;
QPushButton *m_slamRadarBtn;
QPushButton *m_radarMappingBtn;
QPushButton *m_autoNavMappingBtn;
QComboBox *m_missionModeCombo;
// 雷达显示组件
QLabel *m_radarDisplayLabel;
// 状态监控模块
QGroupBox *m_statusGroup;
QLabel *m_batteryLabel;
@ -241,15 +233,46 @@ private:
QTextEdit *m_logTextEdit;
// 状态变量
bool m_isMappingActive;
bool m_isNavigationActive;
bool m_isPhotoTransmissionActive;
bool m_isPersonRecognitionActive;
bool m_isMoving;
QString m_currentPosture;
// 雷达状态变量
bool m_isSlamRadarActive;
bool m_isRadarMappingActive;
bool m_isAutoNavMappingActive;
// 定时器
QTimer *m_statusUpdateTimer;
// SSH连接和命令执行
QProcess *m_sshProcess;
QString m_radarHost;
QString m_radarUser;
QString m_radarPassword;
// 雷达建图进程(本地执行)
QProcess *m_radarMappingProcess;
// 自动导航建图进程(本地执行)
QProcess *m_autoNavMappingProcess;
// 私有方法
void executeSlamRadarCommands();
void stopSlamRadarProcess();
void onSshProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
void onSshProcessError(QProcess::ProcessError error);
// 雷达建图相关方法
void executeRadarMappingCommands();
void stopRadarMappingProcess();
void onRadarMappingProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
void onRadarMappingProcessError(QProcess::ProcessError error);
// 自动导航建图相关方法
void executeAutoNavMappingCommands();
void stopAutoNavMappingProcess();
void onAutoNavMappingProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
void onAutoNavMappingProcessError(QProcess::ProcessError error);
};
#endif // ROBOTDOGCONTROLDIALOG_H

@ -44,8 +44,9 @@
#include "ui/components/DeviceListPanel.h"
#include "ui/components/SystemLogPanel.h"
#include "ui/components/RightFunctionPanel.h"
// #include "ui/dialogs/DroneControlDialog.h"
// #include "ui/dialogs/RobotDogControlDialog.h"
#include "ui/dialogs/DeviceDialog.h"
#include "ui/dialogs/RobotDogControlDialog.h"
#include "ui/components/DeviceCard.h"
// 标准库头文件
#include <string>
@ -357,9 +358,8 @@ private:
QVector<QPair<QString, QString>> m_robotList; ///< 机器人列表(名称-IP地址对
QVector<QPair<QString, QString>> m_uavList; ///< 无人机列表(名称-IP地址对
// 控制对话框(暂时注释掉以避免编译问题)
// DroneControlDialog *m_droneControlDialog; ///< 无人机控制对话框
// RobotDogControlDialog *m_robotDogControlDialog; ///< 机器狗控制对话框
// 控制对话框
RobotDogControlDialog *m_robotDogControlDialog; ///< 机器狗控制对话框
// 人脸识别相关成员变量已移除(功能暂未实现)
};

@ -214,7 +214,7 @@ void RightFunctionPanel::setupBattlefieldExplorationModule()
m_explorationCard = new ModuleCard("🎯 战场探索", "🎯", this);
m_explorationCard->setObjectName("ModuleCard");
m_explorationCard->setProperty("data-module", "battlefield");
// 简化设计:只显示两个主要功能入口按钮
QWidget *mainControlWidget = new QWidget();
mainControlWidget->setObjectName("main-control-widget");
@ -956,14 +956,14 @@ void RightFunctionPanel::onRobotDogControlClicked()
void RightFunctionPanel::onAIAnalysis()
{
emit requestAIAnalysis();
// 显示分析状态
m_aiAnalysisBtn->setText("🧠 分析中...");
m_aiAnalysisBtn->setProperty("class", "loading");
m_aiAnalysisBtn->setEnabled(false);
m_aiAnalysisBtn->style()->unpolish(m_aiAnalysisBtn);
m_aiAnalysisBtn->style()->polish(m_aiAnalysisBtn);
QTimer::singleShot(3000, [this]() {
m_aiAnalysisBtn->setText("🤖 AI分析");
m_aiAnalysisBtn->setProperty("class", "secondary-medium");
@ -1020,21 +1020,21 @@ void RightFunctionPanel::updateDeviceStatus(const QString &deviceName, bool onli
} else {
deviceType = "未知设备";
}
QString statusMsg;
if (online) {
if (battery > 80) {
if (online) {
if (battery > 80) {
statusMsg = QString("%1 %2: 📶 连接质量 %3% (优秀)").arg(deviceType).arg(deviceName).arg(battery);
} else if (battery > 50) {
} else if (battery > 50) {
statusMsg = QString("%1 %2: 📶 连接质量 %3% (良好)").arg(deviceType).arg(deviceName).arg(battery);
} else if (battery > 20) {
} else if (battery > 20) {
statusMsg = QString("%1 %2: ⚠️ 连接质量 %3% (一般)").arg(deviceType).arg(deviceName).arg(battery);
} else {
} else {
statusMsg = QString("%1 %2: ⚠️ 连接质量 %3% (较差)").arg(deviceType).arg(deviceName).arg(battery);
}
} else {
}
} else {
statusMsg = QString("%1 %2: ❌ 设备离线").arg(deviceType).arg(deviceName);
}
}
SystemLogger::getInstance()->logInfo(statusMsg);
}

File diff suppressed because it is too large Load Diff

@ -136,7 +136,7 @@ Visualization Manager:
Shaft Length: 0.8
Shaft Radius: 0.05000000074505806
Value: Arrow
Topic: /robot_odom
Topic: /robot_pose
Unreliable: false
Value: true
@ -144,7 +144,7 @@ Visualization Manager:
- Alpha: 1
Axes Length: 0.8
Axes Radius: 0.08
Class: rviz/PoseWithCovariance
Class: rviz/Pose
Color: 255; 25; 0
Enabled: true
Head Length: 0.30000001192092896
@ -154,7 +154,7 @@ Visualization Manager:
Shaft Length: 1.2
Shaft Radius: 0.08
Shape: Arrow
Topic: /robot_pose
Topic: /robot_pose_arrow
Unreliable: false
Value: true

Loading…
Cancel
Save