#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include "DeviceStatusWidget.h" #include "WorkpiecePositionPresenter.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow, public IYWorkpiecePositionStatus { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void updateStatusLog(const QString& message); void clearDetectionLog(); void Init(); // 实现IYWorkpiecePositionStatus接口 virtual void OnStatusUpdate(const std::string& statusMessage) override; virtual void OnDetectionResult(const WorkpiecePositionDetectionResult& result) override; virtual void OnBinocularMarkConnectionChanged(bool connected) override; virtual void OnEpicEyeConnectionChanged(bool connected) override; virtual void OnWorkStatusChanged(WorkStatus status) override; // 实现IVisionApplicationStatus基类的纯虚函数 virtual void OnCamera1StatusChanged(bool isConnected) override; virtual void OnCamera2StatusChanged(bool isConnected) override; virtual void OnRobotConnectionChanged(bool isConnected) override; virtual void OnSerialConnectionChanged(bool isConnected) override; virtual void OnCameraCountChanged(int cameraCount) override; signals: // 工作状态更新信号 void workStatusUpdateRequested(WorkStatus status); // 检测结果更新信号 void detectionResultUpdateRequested(const WorkpiecePositionDetectionResult& result); // 日志更新信号 void logUpdateRequested(const QString& message); // 清空日志信号 void logClearRequested(); private slots: // 工作状态更新槽函数 void updateWorkStatusLabel(WorkStatus status); // 检测结果更新槽函数 void updateDetectionResultDisplay(const WorkpiecePositionDetectionResult& result); // 日志更新槽函数 void updateDetectionLog(const QString& message); // 清空日志槽函数 void clearDetectionLogUI(); // UI操作相关槽 void on_btn_start_clicked(); void on_btn_stop_clicked(); void on_btn_hide_clicked(); void on_btn_close_clicked(); private: Ui::MainWindow* ui; // 业务逻辑处理类 WorkpiecePositionPresenter* m_presenter = nullptr; // 日志模型 QStringListModel* m_logModel = nullptr; // 设备状态显示widget的引用 DeviceStatusWidget* m_deviceStatusWidget = nullptr; // 添加扩展版本的检测结果添加函数 void addDetectionResult(const WorkpiecePositionDetectionResult& result); // 设置按钮启用/禁用状态 void setButtonsEnabled(bool enabled); // 日志去重相关 QString m_lastLogMessage; // 最后一条日志消息(不含时间戳) int m_lastLogCount = 0; // 最后一条日志的重复次数 // 初始化线程相关 std::thread m_initThread; // 初始化线程 std::atomic m_bExiting{false}; // 退出标志 }; #endif // MAINWINDOW_H