105 lines
3.2 KiB
C++
105 lines
3.2 KiB
C++
#pragma once
|
||
|
||
#include <QDateTime>
|
||
#include <QString>
|
||
#include <QVector>
|
||
#include <QMetaType>
|
||
|
||
// ==================== 枚举定义 ====================
|
||
|
||
// 任务状态
|
||
enum class TaskStatus {
|
||
Waiting, // 等待
|
||
Running, // 运行中
|
||
Finished // 结束
|
||
};
|
||
|
||
// 子任务类型
|
||
enum class SubTaskType {
|
||
HyperSpectual400_1000nm, // 400nm-1000nm高光谱相机
|
||
HyperSpectual1000_1700nm, // 1000nm-1700nm高光谱相机
|
||
SingleLensReflex, // 单反相机
|
||
DepthCamera // 深度相机
|
||
};
|
||
|
||
// ==================== 统一子任务封装 ====================
|
||
|
||
struct SubTask {
|
||
SubTaskType type; // 子任务类型
|
||
|
||
// 共享属性
|
||
QDateTime startTime;
|
||
QDateTime endTime;
|
||
int durationSeconds = 0;
|
||
int estimatedDurationSeconds = 0;
|
||
QString pathLineFilePath;
|
||
TaskStatus status = TaskStatus::Waiting;
|
||
|
||
// 类型特有属性(根据type选择使用)
|
||
double frameRate = 0.0; // 高光谱相机用
|
||
double exposureTime = 0.0; // 高光谱相机用
|
||
int defaultRenderBand = 550; // 1000-1700nm高光谱用
|
||
int captureIntervalSeconds = 5; // 单反/深度相机用
|
||
};
|
||
|
||
// ==================== 定时任务 ====================
|
||
|
||
struct TimedTask {
|
||
int id = 0; // 任务ID
|
||
QDateTime scheduledTime; // 计划时间
|
||
QDateTime startTime; // 开始时间
|
||
QDateTime endTime; // 结束时间
|
||
int durationSeconds = 0; // 耗时(秒)
|
||
QString savePath; // 数据保存路径
|
||
QVector<SubTask> subTasks; // 子任务列表
|
||
TaskStatus status = TaskStatus::Waiting; // 状态
|
||
|
||
// 计算所有子任务的预计总时间
|
||
int totalEstimatedDuration() const {
|
||
int total = 0;
|
||
for (const auto& subTask : subTasks) {
|
||
total += subTask.estimatedDurationSeconds;
|
||
}
|
||
return total;
|
||
}
|
||
|
||
// 获取子任务数量
|
||
int subTaskCount() const {
|
||
return subTasks.size();
|
||
}
|
||
};
|
||
|
||
// ==================== Qt元类型声明 ====================
|
||
Q_DECLARE_METATYPE(TaskStatus)
|
||
Q_DECLARE_METATYPE(SubTaskType)
|
||
Q_DECLARE_METATYPE(SubTask)
|
||
Q_DECLARE_METATYPE(TimedTask)
|
||
|
||
// ==================== 任务文件读写类 ====================
|
||
|
||
class TimedDataCollectionDataStructuresReaderWriter
|
||
{
|
||
public:
|
||
// 保存任务到文件
|
||
static bool saveTasksToFile(const QString& filePath, const QVector<TimedTask>& tasks);
|
||
|
||
// 从文件读取任务
|
||
static bool loadTasksFromFile(const QString& filePath, QVector<TimedTask>& tasks);
|
||
|
||
private:
|
||
// SubTask序列化
|
||
static QJsonObject subTaskToJson(const SubTask& subTask);
|
||
static bool jsonToSubTask(const QJsonObject& json, SubTask& subTask);
|
||
|
||
// TimedTask序列化
|
||
static QJsonObject timedTaskToJson(const TimedTask& task);
|
||
static bool jsonToTimedTask(const QJsonObject& json, TimedTask& task);
|
||
|
||
// 枚举转换
|
||
static QString taskStatusToString(TaskStatus status);
|
||
static TaskStatus stringToTaskStatus(const QString& str);
|
||
|
||
static QString subTaskTypeToString(SubTaskType type);
|
||
static SubTaskType stringToSubTaskType(const QString& str);
|
||
};
|