#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include class ConfigManager; class NetworkManager; class DeviceScanner; class GVSPParser; class PointCloudProcessor; class PointCloudWidget; struct DeviceInfo; class QListWidget; class QListWidgetItem; class QPushButton; class QSlider; class QSpinBox; class QLabel; class QImage; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: // 相机控制槽函数 void onStartClicked(); void onStopClicked(); void onOnceClicked(); void onExposureChanged(int value); void onCaptureClicked(); void onBrowseSavePathClicked(); // 网络配置槽函数 void onConnectClicked(); void onIpAddressChanged(const QString &ip); void onControlPortChanged(int port); void onDataPortChanged(int port); void onNetworkConnected(); void onNetworkDisconnected(); void onDataReceived(const QByteArray &data); // GVSP数据处理槽函数 void onImageReceived(const QImage &image, uint32_t blockId); void onDepthDataReceived(const QByteArray &depthData, uint32_t blockId); void onPointCloudDataReceived(const QByteArray &cloudData, uint32_t blockId); void onPointCloudReady(pcl::PointCloud::Ptr cloud, uint32_t blockId); // 设备扫描槽函数 void onRefreshClicked(); void onDeviceFound(const DeviceInfo &device); void onScanProgress(int current, int total); void onScanFinished(int devicesFound); void onDeviceSelected(QListWidgetItem *item); // 定时器更新 void updateUI(); // 日志槽函数 void onClearLogClicked(); void onSaveLogClicked(); protected: // 重写事件处理函数以监听系统主题变化 void changeEvent(QEvent *event) override; private: void setupUI(); void setupConnections(); void loadSettings(); void saveSettings(); // 拍照辅助函数 bool saveDepthImage(const QString &dir, const QString &baseName, const QString &format); bool savePointCloud(const QString &dir, const QString &baseName, const QString &format); void performBackgroundSave(const QString &saveDir, const QString &baseName, const QString &depthFormat, const QString &pointCloudFormat, const QImage &image, pcl::PointCloud::Ptr cloud); // 日志辅助函数 void addLog(const QString &message, const QString &level = "INFO"); void updateStatistics(); private: // 核心管理器 std::unique_ptr m_configManager; std::unique_ptr m_networkManager; std::unique_ptr m_deviceScanner; std::unique_ptr m_pointCloudProcessor; // UI更新定时器 QTimer *m_updateTimer; // 状态变量 bool m_isConnected; bool m_autoSaveOnNextFrame; // 当前帧数据(用于拍照) QImage m_currentImage; pcl::PointCloud::Ptr m_currentPointCloud; uint32_t m_currentFrameId; // UI控件指针 class QWidget *m_centralWidget; class QSplitter *m_mainSplitter; class QWidget *m_controlPanel; class QLabel *m_imageDisplay; PointCloudWidget *m_pointCloudWidget; // 按钮控件 QPushButton *m_refreshBtn; QPushButton *m_connectBtn; QPushButton *m_startBtn; QPushButton *m_stopBtn; QPushButton *m_onceBtn; QPushButton *m_captureBtn; // 输入控件 QSlider *m_exposureSlider; QSpinBox *m_exposureSpinBox; QSpinBox *m_ctrlPortSpinBox; QSpinBox *m_dataPortSpinBox; // 拍照参数控件 class QLineEdit *m_savePathEdit; QPushButton *m_browseSavePathBtn; class QComboBox *m_depthFormatCombo; class QComboBox *m_pointCloudFormatCombo; // 显示控件 QLabel *m_statusLabel; QListWidget *m_deviceList; // 统计信息控件 QLabel *m_depthFpsLabel; QLabel *m_pointCloudFpsLabel; QLabel *m_resolutionLabel; QLabel *m_queueLabel; // 日志显示控件 class QTextEdit *m_logDisplay; QPushButton *m_clearLogBtn; QPushButton *m_saveLogBtn; // 统计数据 - 深度图 QDateTime m_lastDepthFrameTime; int m_depthFrameCount; int m_totalDepthFrameCount; double m_currentDepthFps; // 统计数据 - 点云 QDateTime m_lastPointCloudFrameTime; int m_pointCloudFrameCount; int m_totalPointCloudFrameCount; double m_currentPointCloudFps; }; #endif // MAINWINDOW_H