2026-06-26 17:55:15 +08:00

97 lines
2.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QImage>
#include <QPixmap>
#include <QMutex>
#include <QString>
#include <atomic>
#include <vector>
#include "IWDRemoteReceiver.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class QLabel;
class QComboBox;
/**
* @brief WDRemoteReceiver 测试应用(支持单目/双目切换)
*
* 演示:
* - 连接 / 断开远端
* - 启停持续工作StartWork 自动订阅StopWork 自动取消)
* - 单次检测
* - 设置曝光 / 增益 / 算法参数
* - 获取 Server 信息
* - 单/双目原始图像在 QLabel 显示
* - 日志内嵌在右下角
* - 检测模式切换mono/binocular
*/
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget* parent = nullptr);
~MainWindow() override;
signals:
// 把库的回调(任意线程)转发到 GUI 线程
void uiAppendLog(const QString& line);
void uiShowDetection(const QString& summary);
void uiShowLeftImage(const QImage& img);
void uiShowRightImage(const QImage& img);
void uiUpdateConnectState(bool connected);
private slots:
void onSearchClicked();
void onDeviceSelected(int index);
void onConnectClicked();
void onDisconnectClicked();
void onLiveStreamClicked();
void onStartWorkClicked();
void onStopWorkClicked();
void onSingleClicked();
void onSetExposureClicked();
void onSetGainClicked();
void onSetAlgoParamsClicked();
void onGetInfoClicked();
void onCustomCmdClicked();
void onSwapCamerasClicked();
void onChooseSaveDirClicked();
void onSaveImagesClicked();
void onDetectModeChanged(int index);
void onAppendLog(const QString& line);
void onShowDetection(const QString& summary);
void onShowLeftImage(const QImage& img);
void onShowRightImage(const QImage& img);
void onUpdateConnectState(bool connected);
private:
void setupReceiver();
void releaseReceiver();
// 把 WDRemoteRawImage 转成 QImage按像素格式构造
static QImage rawImageToQImage(const WDRemoteRawImage& img);
Ui::MainWindow* ui{nullptr};
IWDRemoteReceiver* m_pReceiver{nullptr};
std::vector<WDRemoteDeviceInfo> m_devices;
bool m_singleInProgress{false};
std::atomic<bool> m_monoImageMode{false};
QMutex m_latestImageMutex;
QImage m_latestLeftImage;
QImage m_latestRightImage;
QString m_saveImageDir;
int m_saveImageSeq{1};
QComboBox* m_pDetectModeCombo{nullptr};
};
#endif // MAINWINDOW_H