#ifndef ISTATUSUPDATE_H #define ISTATUSUPDATE_H #include #include #include #include #include #include #include #include #include #include // 皮带撕裂检测工作状态枚举 class BeltTearingWorkStatus { public: enum Type { InitIng, // 初始化中 Ready, // 准备就绪 Working, // 正在检测 Completed, // 检测完成 Error, // 设备异常 Disconnected // 连接断开 }; BeltTearingWorkStatus() : value(InitIng) {} BeltTearingWorkStatus(Type v) : value(v) {} operator Type() const { return value; } Type operator()() const { return value; } private: Type value; }; // 工作状态转换为字符串的工具函数 inline std::string BeltTearingWorkStatusToString(BeltTearingWorkStatus status) { switch (status) { case BeltTearingWorkStatus::InitIng: return "初始化中"; case BeltTearingWorkStatus::Ready: return "准备就绪"; case BeltTearingWorkStatus::Working: return "正在检测"; case BeltTearingWorkStatus::Completed: return "检测完成"; case BeltTearingWorkStatus::Error: return "设备异常"; case BeltTearingWorkStatus::Disconnected: return "连接断开"; default: return "未知状态"; } } // 撕裂数据结构体 struct TearingData { QString level; QString id; QString tearStatus; QString tearType; QString statLineIdx; QString endLineIdx; QString tearDepth; QString tearWidth; QString tearLength; QString older; static TearingData fromJsonObject(const QJsonObject &json) { TearingData data; data.level = json["level"].toString(); data.id = json["id"].toString(); data.tearStatus = json["tearStatus"].toString(); data.tearType = json["tearType"].toString(); data.statLineIdx = json["statLineIdx"].toString(); data.endLineIdx = json["endLineIdx"].toString(); data.tearDepth = json["tearDepth"].toString(); data.tearWidth = json["tearWidth"].toString(); data.tearLength = json["tearLength"].toString(); data.older = json["older"].toString(); return data; } // 重载相等运算符,便于在vector中查找和比较 bool operator==(const TearingData &other) const { return level == other.level && id == other.id && tearStatus == other.tearStatus && tearType == other.tearType && statLineIdx == other.statLineIdx && endLineIdx == other.endLineIdx && tearDepth == other.tearDepth && tearWidth == other.tearWidth && tearLength == other.tearLength && older == other.older; } }; // 皮带撕裂检测结果结构体 struct BeltTearingResult { QImage image; // 检测图像 bool bImageValid = false; std::vector result; // 检测结果描述 bool bResultVaild = false; double confidence = 0.0; // 置信度 QString serverName; // 服务器名称 QDateTime timestamp; // 时间戳 }; // 皮带撕裂检测状态更新接口 class IStatusUpdate { public: virtual ~IStatusUpdate() = default; // 状态文字回调 virtual void OnStatusUpdate(const QString& statusMessage) = 0; // 回调需要显示几个图像,参数为设备别名列表 virtual void OnNeedShowImageCount(const QStringList& deviceAliases) = 0; // 撕裂检测结果回调 virtual void OnTearingResult(const BeltTearingResult& result) = 0; // 服务器连接状态回调 virtual void OnServerConnected(const QString& serverName) = 0; virtual void OnServerDisconnected(const QString& serverName) = 0; // 工作状态回调 virtual void OnWorkStatusChanged(BeltTearingWorkStatus status) = 0; // 错误信息回调 virtual void OnErrorOccurred(const QString& errorMessage) = 0; }; // 声明Qt元类型,使这些结构体能够在信号槽中传递 Q_DECLARE_METATYPE(BeltTearingWorkStatus) Q_DECLARE_METATYPE(BeltTearingResult) #endif // ISTATUSUPDATE_H