Qt AFSim雷达显控端-威胁目标信息卡片
概述
ThreatTargetCard 是一个基于 Qt 的威胁目标信息卡片组件,用于在战术显示界面中展示单个威胁目标的详细信息。该组件支持选中状态、威胁等级可视化以及丰富的目标数据展示。

主要功能
1. 目标数据管理
- 设置目标数据 :通过
setTargetData()方法设置LocalTrack类型的目标数据 - 获取目标数据 :通过
getTargetData()方法获取当前显示的目标数据 - 数据更新:当目标数据更新时,自动刷新界面显示
2. 选中状态管理
- 支持可选中功能(
checkable) - 通过
setSelected()和isSelected()方法管理选中状态 - 选中状态改变时自动更新外观
3. 威胁等级可视化
- 根据目标的 IFF 状态和实体类型自动推断威胁等级
- 威胁等级分为:High (高威胁)、Medium (中威胁)、Low(低威胁)
- 不同威胁等级对应不同的颜色标识:
- High:红色 (#FF0000)
- Medium:橙色 (#FF9900)
- Low:绿色 (#00CC66)
4. 信息展示
卡片按顺序显示以下信息:
- 目标批号(ID):显示在顶部,带有威胁等级背景色
- 目标名称:显示目标名称,如果为空则显示 "-"
- 平台类型:根据高度自动判断(Aircraft/Surface/Submarine/Land)
- 航向:显示目标航向角度(度)
- 速度:显示目标速度(米/秒)
- 高度:显示目标高度(英尺),带有接近/远离箭头指示
- 电子战信号:显示传感器信息
- IFF 状态:显示敌我识别状态(Friend/Foe/Neutral/No IFF Response)
推断规则:
- 如果 IFF 状态为
IFF_FOE,返回 "High" - 如果 IFF 状态为
IFF_NEUTRAL,返回 "Medium" - 如果 IFF 状态为
IFF_FRIEND,返回 "Low" - 如果 IFF 状态未知,根据实体类型推断:
- 空中目标(Air):"High"
- 水面目标(Surface):"Medium"
- 其他:"Low"
QString getThreatLevelBg(const QString &level) const
根据威胁等级返回对应的背景颜色。
QString targetTypeToText(diting::EntityType t) const
将实体类型枚举转换为文本显示。
映射关系:
EntityType::Air→ "Aircraft"EntityType::Surface→ "Surface"EntityType::Submarine→ "Submarine"EntityType::Land→ "Land"- 其他 → "Unknown"
使用示例
基本使用
cpp
#include "threattargetcard.h"
#include "situation_types.h"
// 创建卡片
ThreatTargetCard *card = new ThreatTargetCard(parent);
// 设置目标数据
diting::LocalTrack track;
track.track_number = 1001;
track.target_name = "Target-001";
track.pos.altitude = 5000.0; // 米
track.ground_heading = 45.0;
track.ground_speed = 250.0;
track.iff_status = diting::IFFStatus::IFF_FOE;
card->setTargetData(track);
// 监听选中状态
connect(card, &QPushButton::toggled, [](bool checked) {
if (checked) {
qDebug() << "Card selected";
}
});
数据依赖
依赖的数据结构
组件依赖 diting::LocalTrack 结构体,主要使用的字段包括:
track_number:航迹号(用于显示 ID)target_name:目标名称pos.altitude:高度(用于判断平台类型和显示)ground_heading:地面航向ground_speed:地面速度ground_velocity_valid:地面速度有效性bearing:方位角(用于判断接近/远离)iff_status:IFF 状态(用于威胁等级推断)
接近/远离判断
通过比较航向(ground_heading)和方位角(bearing)的差值来判断目标是否接近:
- 差值绝对值 ≤ 90°:远离(显示 → 箭头)
- 差值绝对值 > 90°:接近(显示 ← 箭头)