parent
b7d44f76f6
commit
2cc4722eee
@ -0,0 +1,18 @@
|
||||
<role>
|
||||
<personality>
|
||||
@!thought://remember
|
||||
@!thought://recall
|
||||
@!thought://ui-design-thinking
|
||||
@!thought://documentation-expression
|
||||
</personality>
|
||||
|
||||
<principle>
|
||||
@!execution://qt-ui-design-workflow
|
||||
@!execution://design-documentation-process
|
||||
</principle>
|
||||
|
||||
<knowledge>
|
||||
@!knowledge://qt-ui-expertise
|
||||
@!knowledge://design-documentation-methods
|
||||
</knowledge>
|
||||
</role>
|
Binary file not shown.
@ -0,0 +1,682 @@
|
||||
// RightFunctionPanel.h
|
||||
#ifndef RIGHTFUNCTIONPANEL_H
|
||||
#define RIGHTFUNCTIONPANEL_H
|
||||
|
||||
#include <QWidget>
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QGridLayout>
|
||||
#include <QGroupBox>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QFrame>
|
||||
#include <QProgressBar>
|
||||
#include <QSlider>
|
||||
|
||||
class ModuleCard : public QFrame
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit ModuleCard(const QString &title, const QString &icon, QWidget *parent = nullptr);
|
||||
void addContent(QWidget *content);
|
||||
|
||||
private:
|
||||
QVBoxLayout *m_contentLayout;
|
||||
QLabel *m_titleLabel;
|
||||
};
|
||||
|
||||
class DeviceCard : public QFrame
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit DeviceCard(const QString &name, const QString &iconPath, QWidget *parent = nullptr);
|
||||
void setStatus(const QString &status, const QColor &color);
|
||||
void setActive(bool active);
|
||||
|
||||
signals:
|
||||
void deviceSelected(const QString &deviceName);
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QMouseEvent *event) override;
|
||||
void paintEvent(QPaintEvent *event) override;
|
||||
|
||||
private:
|
||||
QString m_deviceName;
|
||||
QLabel *m_iconLabel;
|
||||
QLabel *m_nameLabel;
|
||||
QLabel *m_statusLabel;
|
||||
bool m_isActive = false;
|
||||
};
|
||||
|
||||
class RightFunctionPanel : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit RightFunctionPanel(QWidget *parent = nullptr);
|
||||
|
||||
signals:
|
||||
// 战场探索信号
|
||||
void startMapping();
|
||||
void stopMapping();
|
||||
void startNavigation();
|
||||
void stopNavigation();
|
||||
void startPhotoTransmission();
|
||||
void stopPhotoTransmission();
|
||||
void startPersonRecognition();
|
||||
void stopPersonRecognition();
|
||||
|
||||
// 情报传输信号
|
||||
void startVoiceCall();
|
||||
void endVoiceCall();
|
||||
void muteCall(bool muted);
|
||||
void setCallVolume(int volume);
|
||||
|
||||
// 敌情统计信号
|
||||
void refreshEnemyStats();
|
||||
void exportReport();
|
||||
void requestAIAnalysis();
|
||||
|
||||
public slots:
|
||||
void updateEnemyStats(int totalEnemies, const QString &threatLevel);
|
||||
void updateDeviceStatus(const QString &deviceName, bool online, int battery);
|
||||
|
||||
private slots:
|
||||
void onDeviceSelected(const QString &deviceName);
|
||||
void onMappingToggle();
|
||||
void onNavigationToggle();
|
||||
void onPhotoTransmissionToggle();
|
||||
void onPersonRecognitionToggle();
|
||||
void onVoiceCallToggle();
|
||||
void onRefreshStats();
|
||||
void onAIAnalysis();
|
||||
|
||||
private:
|
||||
void setupUI();
|
||||
void setupBattlefieldExplorationModule();
|
||||
void setupIntelligenceModule();
|
||||
void setupEnemyStatsModule();
|
||||
void applyStyles();
|
||||
|
||||
// UI组件
|
||||
QVBoxLayout *m_mainLayout;
|
||||
|
||||
// 战场探索模块
|
||||
ModuleCard *m_explorationCard;
|
||||
DeviceCard *m_robotDogCard;
|
||||
DeviceCard *m_droneCard;
|
||||
QPushButton *m_mappingBtn;
|
||||
QPushButton *m_navigationBtn;
|
||||
QPushButton *m_photoBtn;
|
||||
QPushButton *m_recognitionBtn;
|
||||
QString m_selectedDevice;
|
||||
|
||||
// 情报传输模块
|
||||
ModuleCard *m_intelligenceCard;
|
||||
QPushButton *m_voiceCallBtn;
|
||||
QPushButton *m_muteBtn;
|
||||
QSlider *m_volumeSlider;
|
||||
QLabel *m_callStatusLabel;
|
||||
bool m_isInCall = false;
|
||||
|
||||
// 敌情统计模块
|
||||
ModuleCard *m_statsCard;
|
||||
QLabel *m_totalEnemiesLabel;
|
||||
QLabel *m_threatLevelLabel;
|
||||
QPushButton *m_refreshBtn;
|
||||
QPushButton *m_aiAnalysisBtn;
|
||||
QPushButton *m_exportBtn;
|
||||
};
|
||||
|
||||
#endif // RIGHTFUNCTIONPANEL_H
|
||||
|
||||
// RightFunctionPanel.cpp
|
||||
#include "RightFunctionPanel.h"
|
||||
#include <QMouseEvent>
|
||||
#include <QPainter>
|
||||
#include <QTimer>
|
||||
|
||||
// ModuleCard实现
|
||||
ModuleCard::ModuleCard(const QString &title, const QString &icon, QWidget *parent)
|
||||
: QFrame(parent)
|
||||
{
|
||||
setObjectName("ModuleCard");
|
||||
setFrameStyle(QFrame::StyledPanel);
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||
layout->setSpacing(12);
|
||||
layout->setContentsMargins(12, 12, 12, 12);
|
||||
|
||||
// 标题栏
|
||||
QHBoxLayout *headerLayout = new QHBoxLayout();
|
||||
QLabel *iconLabel = new QLabel();
|
||||
iconLabel->setObjectName("ModuleIcon");
|
||||
iconLabel->setText(icon); // 使用Unicode图标或设置图片
|
||||
iconLabel->setFixedSize(20, 20);
|
||||
|
||||
m_titleLabel = new QLabel(title);
|
||||
m_titleLabel->setObjectName("ModuleTitle");
|
||||
|
||||
headerLayout->addWidget(iconLabel);
|
||||
headerLayout->addWidget(m_titleLabel);
|
||||
headerLayout->addStretch();
|
||||
|
||||
layout->addLayout(headerLayout);
|
||||
|
||||
// 内容区域
|
||||
m_contentLayout = new QVBoxLayout();
|
||||
m_contentLayout->setSpacing(8);
|
||||
layout->addLayout(m_contentLayout);
|
||||
}
|
||||
|
||||
void ModuleCard::addContent(QWidget *content)
|
||||
{
|
||||
m_contentLayout->addWidget(content);
|
||||
}
|
||||
|
||||
// DeviceCard实现
|
||||
DeviceCard::DeviceCard(const QString &name, const QString &iconPath, QWidget *parent)
|
||||
: QFrame(parent), m_deviceName(name)
|
||||
{
|
||||
setObjectName("DeviceCard");
|
||||
setFrameStyle(QFrame::StyledPanel);
|
||||
setCursor(Qt::PointingHandCursor);
|
||||
setFixedHeight(80);
|
||||
|
||||
QVBoxLayout *layout = new QVBoxLayout(this);
|
||||
layout->setAlignment(Qt::AlignCenter);
|
||||
layout->setSpacing(4);
|
||||
|
||||
m_iconLabel = new QLabel();
|
||||
m_iconLabel->setObjectName("DeviceIcon");
|
||||
m_iconLabel->setFixedSize(32, 32);
|
||||
m_iconLabel->setAlignment(Qt::AlignCenter);
|
||||
// 设置图标,这里用文字代替
|
||||
m_iconLabel->setText(name.contains("机器狗") ? "🐕" : "🚁");
|
||||
|
||||
m_nameLabel = new QLabel(name);
|
||||
m_nameLabel->setObjectName("DeviceName");
|
||||
m_nameLabel->setAlignment(Qt::AlignCenter);
|
||||
|
||||
m_statusLabel = new QLabel("离线");
|
||||
m_statusLabel->setObjectName("DeviceStatus");
|
||||
m_statusLabel->setAlignment(Qt::AlignCenter);
|
||||
|
||||
layout->addWidget(m_iconLabel);
|
||||
layout->addWidget(m_nameLabel);
|
||||
layout->addWidget(m_statusLabel);
|
||||
}
|
||||
|
||||
void DeviceCard::setStatus(const QString &status, const QColor &color)
|
||||
{
|
||||
m_statusLabel->setText(status);
|
||||
m_statusLabel->setStyleSheet(QString("color: %1;").arg(color.name()));
|
||||
}
|
||||
|
||||
void DeviceCard::setActive(bool active)
|
||||
{
|
||||
m_isActive = active;
|
||||
update();
|
||||
}
|
||||
|
||||
void DeviceCard::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
if (event->button() == Qt::LeftButton) {
|
||||
emit deviceSelected(m_deviceName);
|
||||
}
|
||||
QFrame::mousePressEvent(event);
|
||||
}
|
||||
|
||||
void DeviceCard::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QFrame::paintEvent(event);
|
||||
|
||||
if (m_isActive) {
|
||||
QPainter painter(this);
|
||||
painter.setPen(QPen(QColor("#2E5D31"), 2));
|
||||
painter.drawRect(rect().adjusted(1, 1, -1, -1));
|
||||
}
|
||||
}
|
||||
|
||||
// RightFunctionPanel实现
|
||||
RightFunctionPanel::RightFunctionPanel(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
{
|
||||
setupUI();
|
||||
applyStyles();
|
||||
}
|
||||
|
||||
void RightFunctionPanel::setupUI()
|
||||
{
|
||||
m_mainLayout = new QVBoxLayout(this);
|
||||
m_mainLayout->setSpacing(12);
|
||||
m_mainLayout->setContentsMargins(16, 16, 16, 16);
|
||||
|
||||
// 面板标题
|
||||
QLabel *titleLabel = new QLabel("功能面板");
|
||||
titleLabel->setObjectName("PanelTitle");
|
||||
titleLabel->setAlignment(Qt::AlignCenter);
|
||||
m_mainLayout->addWidget(titleLabel);
|
||||
|
||||
setupBattlefieldExplorationModule();
|
||||
setupIntelligenceModule();
|
||||
setupEnemyStatsModule();
|
||||
|
||||
m_mainLayout->addStretch();
|
||||
}
|
||||
|
||||
void RightFunctionPanel::setupBattlefieldExplorationModule()
|
||||
{
|
||||
m_explorationCard = new ModuleCard("战场探索", "🔍", this);
|
||||
|
||||
// 设备选择
|
||||
QHBoxLayout *deviceLayout = new QHBoxLayout();
|
||||
m_robotDogCard = new DeviceCard("机器狗", "robot_dog.png", this);
|
||||
m_droneCard = new DeviceCard("无人机", "drone.png", this);
|
||||
|
||||
connect(m_robotDogCard, &DeviceCard::deviceSelected, this, &RightFunctionPanel::onDeviceSelected);
|
||||
connect(m_droneCard, &DeviceCard::deviceSelected, this, &RightFunctionPanel::onDeviceSelected);
|
||||
|
||||
deviceLayout->addWidget(m_robotDogCard);
|
||||
deviceLayout->addWidget(m_droneCard);
|
||||
|
||||
QWidget *deviceWidget = new QWidget();
|
||||
deviceWidget->setLayout(deviceLayout);
|
||||
m_explorationCard->addContent(deviceWidget);
|
||||
|
||||
// 功能按钮
|
||||
QGridLayout *buttonLayout = new QGridLayout();
|
||||
m_mappingBtn = new QPushButton("自主建图");
|
||||
m_navigationBtn = new QPushButton("导航避障");
|
||||
m_photoBtn = new QPushButton("照片传输");
|
||||
m_recognitionBtn = new QPushButton("人物识别");
|
||||
|
||||
// 设置按钮样式类名
|
||||
m_mappingBtn->setObjectName("FunctionBtn");
|
||||
m_navigationBtn->setObjectName("FunctionBtn");
|
||||
m_photoBtn->setObjectName("FunctionBtn");
|
||||
m_recognitionBtn->setObjectName("FunctionBtn");
|
||||
|
||||
buttonLayout->addWidget(m_mappingBtn, 0, 0);
|
||||
buttonLayout->addWidget(m_navigationBtn, 0, 1);
|
||||
buttonLayout->addWidget(m_photoBtn, 1, 0);
|
||||
buttonLayout->addWidget(m_recognitionBtn, 1, 1);
|
||||
|
||||
connect(m_mappingBtn, &QPushButton::clicked, this, &RightFunctionPanel::onMappingToggle);
|
||||
connect(m_navigationBtn, &QPushButton::clicked, this, &RightFunctionPanel::onNavigationToggle);
|
||||
connect(m_photoBtn, &QPushButton::clicked, this, &RightFunctionPanel::onPhotoTransmissionToggle);
|
||||
connect(m_recognitionBtn, &QPushButton::clicked, this, &RightFunctionPanel::onPersonRecognitionToggle);
|
||||
|
||||
QWidget *buttonWidget = new QWidget();
|
||||
buttonWidget->setLayout(buttonLayout);
|
||||
m_explorationCard->addContent(buttonWidget);
|
||||
|
||||
m_mainLayout->addWidget(m_explorationCard);
|
||||
}
|
||||
|
||||
void RightFunctionPanel::setupIntelligenceModule()
|
||||
{
|
||||
m_intelligenceCard = new ModuleCard("情报传输", "📡", this);
|
||||
|
||||
// 通话控制
|
||||
QHBoxLayout *callLayout = new QHBoxLayout();
|
||||
m_voiceCallBtn = new QPushButton("开始通话");
|
||||
m_muteBtn = new QPushButton("静音");
|
||||
m_voiceCallBtn->setObjectName("FunctionBtn");
|
||||
m_muteBtn->setObjectName("FunctionBtn");
|
||||
m_muteBtn->setEnabled(false);
|
||||
|
||||
callLayout->addWidget(m_voiceCallBtn);
|
||||
callLayout->addWidget(m_muteBtn);
|
||||
|
||||
connect(m_voiceCallBtn, &QPushButton::clicked, this, &RightFunctionPanel::onVoiceCallToggle);
|
||||
|
||||
QWidget *callWidget = new QWidget();
|
||||
callWidget->setLayout(callLayout);
|
||||
m_intelligenceCard->addContent(callWidget);
|
||||
|
||||
// 音量控制
|
||||
QHBoxLayout *volumeLayout = new QHBoxLayout();
|
||||
QLabel *volumeLabel = new QLabel("音量:");
|
||||
m_volumeSlider = new QSlider(Qt::Horizontal);
|
||||
m_volumeSlider->setRange(0, 100);
|
||||
m_volumeSlider->setValue(70);
|
||||
|
||||
volumeLayout->addWidget(volumeLabel);
|
||||
volumeLayout->addWidget(m_volumeSlider);
|
||||
|
||||
QWidget *volumeWidget = new QWidget();
|
||||
volumeWidget->setLayout(volumeLayout);
|
||||
m_intelligenceCard->addContent(volumeWidget);
|
||||
|
||||
// 通话状态
|
||||
m_callStatusLabel = new QLabel("未连接");
|
||||
m_callStatusLabel->setObjectName("CallStatus");
|
||||
m_intelligenceCard->addContent(m_callStatusLabel);
|
||||
|
||||
m_mainLayout->addWidget(m_intelligenceCard);
|
||||
}
|
||||
|
||||
void RightFunctionPanel::setupEnemyStatsModule()
|
||||
{
|
||||
m_statsCard = new ModuleCard("敌情统计", "📊", this);
|
||||
|
||||
// 统计信息
|
||||
QVBoxLayout *statsLayout = new QVBoxLayout();
|
||||
|
||||
m_totalEnemiesLabel = new QLabel("已发现目标: 0");
|
||||
m_threatLevelLabel = new QLabel("威胁等级: 无");
|
||||
m_totalEnemiesLabel->setObjectName("StatLabel");
|
||||
m_threatLevelLabel->setObjectName("StatLabel");
|
||||
|
||||
statsLayout->addWidget(m_totalEnemiesLabel);
|
||||
statsLayout->addWidget(m_threatLevelLabel);
|
||||
|
||||
QWidget *statsWidget = new QWidget();
|
||||
statsWidget->setLayout(statsLayout);
|
||||
m_statsCard->addContent(statsWidget);
|
||||
|
||||
// 操作按钮
|
||||
QHBoxLayout *statsButtonLayout = new QHBoxLayout();
|
||||
m_refreshBtn = new QPushButton("刷新");
|
||||
m_aiAnalysisBtn = new QPushButton("AI分析");
|
||||
m_exportBtn = new QPushButton("导出报告");
|
||||
|
||||
m_refreshBtn->setObjectName("FunctionBtn");
|
||||
m_aiAnalysisBtn->setObjectName("FunctionBtn");
|
||||
m_exportBtn->setObjectName("FunctionBtn");
|
||||
|
||||
statsButtonLayout->addWidget(m_refreshBtn);
|
||||
statsButtonLayout->addWidget(m_aiAnalysisBtn);
|
||||
|
||||
connect(m_refreshBtn, &QPushButton::clicked, this, &RightFunctionPanel::onRefreshStats);
|
||||
connect(m_aiAnalysisBtn, &QPushButton::clicked, this, &RightFunctionPanel::onAIAnalysis);
|
||||
|
||||
QWidget *statsButtonWidget = new QWidget();
|
||||
statsButtonWidget->setLayout(statsButtonLayout);
|
||||
m_statsCard->addContent(statsButtonWidget);
|
||||
|
||||
// 导出按钮单独一行
|
||||
m_statsCard->addContent(m_exportBtn);
|
||||
|
||||
m_mainLayout->addWidget(m_statsCard);
|
||||
}
|
||||
|
||||
void RightFunctionPanel::applyStyles()
|
||||
{
|
||||
QString styles = R"(
|
||||
QWidget {
|
||||
font-family: "Microsoft YaHei", "SimHei", sans-serif;
|
||||
}
|
||||
|
||||
RightFunctionPanel {
|
||||
background-color: #2A3F47;
|
||||
border-left: 2px solid #546E7A;
|
||||
}
|
||||
|
||||
#PanelTitle {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #FFFFFF;
|
||||
border-bottom: 1px solid #546E7A;
|
||||
padding-bottom: 8px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
#ModuleCard {
|
||||
background-color: #354A54;
|
||||
border: 1px solid #546E7A;
|
||||
border-radius: 8px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
#ModuleCard:hover {
|
||||
border-color: #2E5D31;
|
||||
background-color: #4A6572;
|
||||
}
|
||||
|
||||
#ModuleTitle {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
#ModuleIcon {
|
||||
font-size: 16px;
|
||||
color: #2E5D31;
|
||||
}
|
||||
|
||||
#DeviceCard {
|
||||
background-color: #3D525E;
|
||||
border: 1px solid #546E7A;
|
||||
border-radius: 6px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
#DeviceCard:hover {
|
||||
background-color: #4A6572;
|
||||
border-color: #2E5D31;
|
||||
}
|
||||
|
||||
#DeviceName {
|
||||
font-size: 12px;
|
||||
color: #FFFFFF;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
#DeviceStatus {
|
||||
font-size: 10px;
|
||||
color: #78909C;
|
||||
}
|
||||
|
||||
#FunctionBtn {
|
||||
background-color: #2E5D31;
|
||||
color: #FFFFFF;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
padding: 8px 12px;
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
min-height: 32px;
|
||||
}
|
||||
|
||||
#FunctionBtn:hover {
|
||||
background-color: #245429;
|
||||
}
|
||||
|
||||
#FunctionBtn:pressed {
|
||||
background-color: #1a3d1d;
|
||||
}
|
||||
|
||||
#FunctionBtn:disabled {
|
||||
background-color: #78909C;
|
||||
}
|
||||
|
||||
#StatLabel {
|
||||
font-size: 12px;
|
||||
color: #B0BEC5;
|
||||
padding: 4px 0;
|
||||
}
|
||||
|
||||
#CallStatus {
|
||||
font-size: 11px;
|
||||
color: #78909C;
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
QSlider::groove:horizontal {
|
||||
border: 1px solid #546E7A;
|
||||
height: 4px;
|
||||
background: #3D525E;
|
||||
border-radius: 2px;
|
||||
}
|
||||
|
||||
QSlider::handle:horizontal {
|
||||
background: #2E5D31;
|
||||
border: 1px solid #546E7A;
|
||||
width: 12px;
|
||||
margin: -4px 0;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
QSlider::handle:horizontal:hover {
|
||||
background: #245429;
|
||||
}
|
||||
)";
|
||||
|
||||
setStyleSheet(styles);
|
||||
}
|
||||
|
||||
// 槽函数实现
|
||||
void RightFunctionPanel::onDeviceSelected(const QString &deviceName)
|
||||
{
|
||||
m_selectedDevice = deviceName;
|
||||
|
||||
// 更新设备选择状态
|
||||
m_robotDogCard->setActive(deviceName.contains("机器狗"));
|
||||
m_droneCard->setActive(deviceName.contains("无人机"));
|
||||
|
||||
// 根据设备类型启用/禁用相应按钮
|
||||
bool isRobotDog = deviceName.contains("机器狗");
|
||||
m_mappingBtn->setEnabled(isRobotDog);
|
||||
m_navigationBtn->setEnabled(isRobotDog);
|
||||
m_photoBtn->setEnabled(!isRobotDog);
|
||||
m_recognitionBtn->setEnabled(!isRobotDog);
|
||||
}
|
||||
|
||||
void RightFunctionPanel::onMappingToggle()
|
||||
{
|
||||
static bool isMappingActive = false;
|
||||
isMappingActive = !isMappingActive;
|
||||
|
||||
m_mappingBtn->setText(isMappingActive ? "停止建图" : "自主建图");
|
||||
|
||||
if (isMappingActive) {
|
||||
emit startMapping();
|
||||
} else {
|
||||
emit stopMapping();
|
||||
}
|
||||
}
|
||||
|
||||
void RightFunctionPanel::onNavigationToggle()
|
||||
{
|
||||
static bool isNavigationActive = false;
|
||||
isNavigationActive = !isNavigationActive;
|
||||
|
||||
m_navigationBtn->setText(isNavigationActive ? "停止导航" : "导航避障");
|
||||
|
||||
if (isNavigationActive) {
|
||||
emit startNavigation();
|
||||
} else {
|
||||
emit stopNavigation();
|
||||
}
|
||||
}
|
||||
|
||||
void RightFunctionPanel::onPhotoTransmissionToggle()
|
||||
{
|
||||
static bool isTransmissionActive = false;
|
||||
isTransmissionActive = !isTransmissionActive;
|
||||
|
||||
m_photoBtn->setText(isTransmissionActive ? "停止传输" : "照片传输");
|
||||
|
||||
if (isTransmissionActive) {
|
||||
emit startPhotoTransmission();
|
||||
} else {
|
||||
emit stopPhotoTransmission();
|
||||
}
|
||||
}
|
||||
|
||||
void RightFunctionPanel::onPersonRecognitionToggle()
|
||||
{
|
||||
static bool isRecognitionActive = false;
|
||||
isRecognitionActive = !isRecognitionActive;
|
||||
|
||||
m_recognitionBtn->setText(isRecognitionActive ? "停止识别" : "人物识别");
|
||||
|
||||
if (isRecognitionActive) {
|
||||
emit startPersonRecognition();
|
||||
} else {
|
||||
emit stopPersonRecognition();
|
||||
}
|
||||
}
|
||||
|
||||
void RightFunctionPanel::onVoiceCallToggle()
|
||||
{
|
||||
m_isInCall = !m_isInCall;
|
||||
|
||||
m_voiceCallBtn->setText(m_isInCall ? "结束通话" : "开始通话");
|
||||
m_muteBtn->setEnabled(m_isInCall);
|
||||
m_callStatusLabel->setText(m_isInCall ? "通话中..." : "未连接");
|
||||
|
||||
if (m_isInCall) {
|
||||
emit startVoiceCall();
|
||||
} else {
|
||||
emit endVoiceCall();
|
||||
}
|
||||
}
|
||||
|
||||
void RightFunctionPanel::onRefreshStats()
|
||||
{
|
||||
emit refreshEnemyStats();
|
||||
|
||||
// 模拟刷新效果
|
||||
m_refreshBtn->setText("刷新中...");
|
||||
m_refreshBtn->setEnabled(false);
|
||||
|
||||
QTimer::singleShot(2000, [this]() {
|
||||
m_refreshBtn->setText("刷新");
|
||||
m_refreshBtn->setEnabled(true);
|
||||
});
|
||||
}
|
||||
|
||||
void RightFunctionPanel::onAIAnalysis()
|
||||
{
|
||||
emit requestAIAnalysis();
|
||||
|
||||
// 显示分析状态
|
||||
m_aiAnalysisBtn->setText("分析中...");
|
||||
m_aiAnalysisBtn->setEnabled(false);
|
||||
|
||||
QTimer::singleShot(3000, [this]() {
|
||||
m_aiAnalysisBtn->setText("AI分析");
|
||||
m_aiAnalysisBtn->setEnabled(true);
|
||||
});
|
||||
}
|
||||
|
||||
void RightFunctionPanel::updateEnemyStats(int totalEnemies, const QString &threatLevel)
|
||||
{
|
||||
m_totalEnemiesLabel->setText(QString("已发现目标: %1").arg(totalEnemies));
|
||||
m_threatLevelLabel->setText(QString("威胁等级: %1").arg(threatLevel));
|
||||
|
||||
// 根据威胁等级设置颜色
|
||||
if (threatLevel == "高") {
|
||||
m_threatLevelLabel->setStyleSheet("color: #DC143C;");
|
||||
} else if (threatLevel == "中") {
|
||||
m_threatLevelLabel->setStyleSheet("color: #FF8C00;");
|
||||
} else {
|
||||
m_threatLevelLabel->setStyleSheet("color: #4CAF50;");
|
||||
}
|
||||
}
|
||||
|
||||
void RightFunctionPanel::updateDeviceStatus(const QString &deviceName, bool online, int battery)
|
||||
{
|
||||
DeviceCard *deviceCard = nullptr;
|
||||
if (deviceName.contains("机器狗")) {
|
||||
deviceCard = m_robotDogCard;
|
||||
} else if (deviceName.contains("无人机")) {
|
||||
deviceCard = m_droneCard;
|
||||
}
|
||||
|
||||
if (deviceCard) {
|
||||
if (online) {
|
||||
deviceCard->setStatus(QString("在线 %1%").arg(battery), QColor("#4CAF50"));
|
||||
} else {
|
||||
deviceCard->setStatus("离线", QColor("#78909C"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include "RightFunctionPanel.moc"
|
Loading…
Reference in new issue