You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Drone_project/Src/models/detectiondata.h

99 lines
2.6 KiB

#ifndef DETECTIONDATA_H
#define DETECTIONDATA_H
#include <QObject>
#include <QString>
#include <QDateTime>
#include <QTimer>
#include <QVector>
#include <QStringList>
#include <QVector3D>
/**
* 检测目标信息结构
* 用于存储单个检测目标的详细信息
*/
struct DetectionTarget {
QString type; // 目标类型(人员、车辆、建筑物等)
QString id; // 目标ID
float confidence; // 置信度
QVector3D position; // 位置信息
QVector3D size; // 尺寸信息
QDateTime timestamp; // 检测时间
DetectionTarget() : confidence(0.0f) {}
DetectionTarget(const QString& t, const QString& i, float c)
: type(t), id(i), confidence(c) {
timestamp = QDateTime::currentDateTime();
}
};
/**
* 检测数据模型类
* 用于管理实时检测信息,包括目标检测、状态更新等
*/
class DetectionData : public QObject {
Q_OBJECT
public:
explicit DetectionData(QObject* parent = nullptr);
~DetectionData();
// 检测状态
enum DetectionStatus {
IDLE, // 空闲
DETECTING, // 检测中
PROCESSING, // 处理中
ERROR // 错误
};
// 获取检测信息
QVector<DetectionTarget> getTargets() const { return targets_; }
DetectionStatus getStatus() const { return status_; }
float getAccuracy() const { return accuracy_; }
QDateTime getLastUpdate() const { return lastUpdate_; }
QString getStatusText() const;
// 设置检测信息
void setStatus(DetectionStatus status);
void setAccuracy(float accuracy);
void addTarget(const DetectionTarget& target);
void removeTarget(const QString& targetId);
void clearTargets();
// 模拟检测数据更新
void startSimulation();
void stopSimulation();
void updateSimulation();
signals:
void detectionUpdated();
void statusChanged(DetectionStatus status);
void targetAdded(const DetectionTarget& target);
void targetRemoved(const QString& targetId);
private slots:
void onSimulationTimer();
private:
QVector<DetectionTarget> targets_;
DetectionStatus status_;
float accuracy_;
QDateTime lastUpdate_;
// 模拟数据更新
QTimer* simulationTimer_;
int simulationStep_;
// 模拟目标类型列表
QStringList targetTypes_;
QStringList targetIds_;
void generateRandomTarget();
void updateTargetPositions();
QString getRandomTargetType();
QString getRandomTargetId();
};
#endif // DETECTIONDATA_H