#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include #include #include #include #include #include #include "CommonDialogCamera.h" #include "dialogalgoarg.h" #include "CommonDialogCameraLevel.h" #include "DeviceStatusWidget.h" #include "DetectLogHelper.h" #include "AboutDialog.h" #include "RodAndBarPositionPresenter.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow, public IYRodAndBarPositionStatus { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void updateStatusLog(const QString& message); void clearDetectionLog(); void Init(); // 实现IYRodAndBarPositionStatus接口 virtual void OnStatusUpdate(const std::string& statusMessage) override; virtual void OnDetectionResult(const DetectionResult& result) override; 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; virtual void OnWorkStatusChanged(WorkStatus status) override; signals: void workStatusUpdateRequested(WorkStatus status); void detectionResultUpdateRequested(const DetectionResult& result); private slots: void updateWorkStatusLabel(WorkStatus status); void updateDetectionResultDisplay(const DetectionResult& result); void onCameraClicked(int cameraIndex); void on_btn_start_clicked(); void on_btn_stop_clicked(); void on_btn_camera_clicked(); void on_btn_algo_config_clicked(); void on_btn_camera_levelling_clicked(); void on_btn_hide_clicked(); void on_btn_close_clicked(); void on_btn_test_clicked(); void onSaveDetectionData(); private: Ui::MainWindow * ui; CommonDialogCamera* ui_dialogCamera = nullptr; DialogAlgoArg* ui_dialogConfig = nullptr; CommonDialogCameraLevel* ui_dialogCameraLevel = nullptr; RodAndBarPositionPresenter* m_presenter = nullptr; DetectLogHelper* m_logHelper = nullptr; DeviceStatusWidget* m_deviceStatusWidget = nullptr; QPushButton* m_selectedButton = nullptr; QMenu* m_contextMenu = nullptr; QAction* m_saveDataAction = nullptr; void displayImage(const QImage& image); void displayImageInSecondView(const QImage& image); void addDetectionResult(const DetectionResult& result); void setButtonsEnabled(bool enabled); void setButtonImage(QPushButton* button, const QString& imagePath); void setButtonSelectedState(QPushButton* button, bool selected); void restoreAllButtonStates(); void setOtherButtonsEnabled(QPushButton* exceptButton, bool enabled); // 页面布局调整函数 void adjustLayoutForCameraCount(int cameraCount); void setupSingleCameraLayout(); void setupMultiCameraLayout(); int getAvailableHeight(); // 获取可用高度(屏幕高度 - 任务栏 - 边距) void setupContextMenu(); void showContextMenu(const QPoint& pos, QGraphicsView* view); bool saveDetectionDataToFile(const QString& filePath, int cameraIndex); protected: bool eventFilter(QObject* obj, QEvent* event) override; private: QLabel* m_versionLabel = nullptr; // 版本标签(点击弹出关于对话框) }; #endif // MAINWINDOW_H