// MainWidget.h #pragma once #ifndef MAINWIDGET_H #define MAINWIDGET_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../Json/readJsonFile.h" #include "../RecvDataHandler/RecvDataHandler.h" #include "../LicenseGenerate/LicenseGenerate.h" #include "../LicenseGenerate/LicenseConfirmWindow.h" #include "../Network/mdns/servicemodel.h" #include "../Network/ClientHandler.h" #include "../Network/httpClient.h" #include "FocusWindow.h" #define TEST_UDP_BROADCAST 0 // 用于测试 UDP 组播实现 mdns 功能 非标准 mdns #define MANUAL_UPLOAD_LICENSE 0 // 打开手动上传 License的功能 #define TCP_CONNECT_PORT 12412 // TCP监听的端口 class MainWidget : public QWidget { Q_OBJECT public: // 构造函数 explicit MainWidget(QWidget* parent = nullptr); ~MainWidget(); private slots: // 发送HTTP请求 //void onSomeButtonClicked(); // 处理HTTP响应 void onHttpRequestFinished(const QJsonObject& response); // 处理HTTP错误 void onHttpRequestError(const QString& errorString); // 处理开始服务器按钮点击事件 void onStartServerClicked(); // 处理发送获取设备信息按键点击事件 void onSendGetDevInfoClicked(); // 处理发送取图按键点击事件 void onSendGetPicClicked(); // 处理发送拉视频流按键点击事件 void onSendGetVideoClicked(); void onLicenseButtonClicked(); void onUuidButtonClicked(); // 处理一键发送按钮点击事件 void onSendAllClicked(); // 处理单独发送项按钮点击事件 void onSendFrontItemClicked(); void onSendBackItemClicked(); // 处理单独发送功能配置项按钮点击事件 void onSendFrontFuncItemClicked(); void onSendBackFuncItemClicked(); // 处理数据接收信号 //void onDataReceived(const QString& client, const QByteArray& data); // 处理状态更新信号 void onStatusUpdated(const QString& client, int itemIndex, int funcItemIndex, bool success, const QString& itemData, const QString& funcItemData, const QJsonArray& jsonArray, int itemJsonIndex); // 处理所有项目处理完毕信号 void onAllItemsProcessed(const QString& client, int itemsProcessedCount); // 处理客户端断开连接 void onClientDisconnected(ClientHandler* handler); // 启动超时定时器 void onStartTimeout(int clientId, int timeout); // 为了使滚动条在最下面,不用手动鼠标下拉 void scrollToBottom(); // 处理点击 Save Log 按键 void onSelectFileButtonClicked(); // 处理点击 Clear Log 按键 void onclearLogButtonClicked(); // 处理复选框的状态 void onSaveCheckBoxStateChanged(int state); // 处理打开调焦的大窗口 void onOpenFocusWindowClicked(); void printThreadPoolInfo(); void onCheckThreadStatus(); void onCheckConnectionStatus(); void startClientReadTimer(int clientId); void stopClientReadTimer(int clientId); #if TEST_UDP_BROADCAST void sendMulticastMessage(); #endif private: // 读取 test JSON 配置文件 void readJsonConfig(); // 设置 UI void setupUI(); QGroupBox* createLicenseGroupBox(); QGroupBox* createFrontDeviceInfoGroupBox(); QGroupBox* createBackDeviceInfoGroupBox(); QWidget* createFunctionTestTab(const QJsonArray& BoardFuncTest, const QString& propertyName); QWidget* createFunctionConfigTab(const QJsonArray& BoardFuncConfig, const QString& propertyName); QWidget* createImageDisplayTab(); QWidget* createVideoDisplayTab(); QGroupBox* createBackConnectServerGroupBox(); // 保存日志到文件 void saveStatusListToFile(const QString& filePath); // 用于更新按键文本的函数 void updateServerButtonText(); void onDisconnectClient(int clientId); void setupTimerForThreadPoolInfo(); void sendDataToClient(int clientId, const QByteArray& data); //void FactoryToolSendPostFactoryInfotoHttpServer(); void FactoryToolSendPostTestToHttpServer(); void FactoryToolSendPostLicenseToHttpServer(const QString& hardware_info, const QString& license_info); void FactoryToolSendPostComfirmToHttpServer(const QString& mac_addr, const QString& uuid); void FactoryToolSendGetUuidToHttpServer(const QString& mac_addr); void FactoryToolSendGetLicenseToHttpServer(const QString& hw_info); QTcpServer* server; // TCP 服务器 HttpClient* httpClient; // HTTP 服务器 QJsonArray frontBoardOneClickTest; // 前板一键功能测试 JSON QJsonArray frontBoardTest; // 前板单项测试 JSON QJsonArray frontBoardFuncConfig; // 前板功能配置参数 JSON QJsonArray frontBoardDevInfoJson; // 前板设备信息参数 JSON QJsonArray frontBoardLicenseJson; // 前板License JSON QJsonArray backBoardOneClickTest; // 后板一键功能测试 JSON QJsonArray backBoardTest; // 后板单项测试 JSON QJsonArray backBoardFuncConfig; // 后板功能配置参数 JSON QJsonArray backBoardDevInfoJson; // 后板设备信息参数 JSON QJsonArray backBoardUuidJson; // 后板UUID JSON QJsonArray testJsonConfig; // 功能测试区 JSON 配置 QJsonArray funcJsonConfig; // 功能配置区 JSON 配置 QJsonArray getDevInfoJson; // 获取设备信息 JSON 配置 QJsonArray getPicJson; // 发送取图指令 JSON 配置 QJsonArray getVideoJson; // 发送拉视频指令 JSON 配置 QVBoxLayout* mainLayout; // 主布局 QListWidget* statusListWidget; // 状态列表 QPushButton* startServerButton; // 开始服务器按键 QPushButton* focusWindowsButton; // 调焦窗口按键 QPushButton* sendAllButton; // 一键发送按键 QThreadPool threadPool; // 线程池 QMutex mutex; // 互斥锁 int nextClientId; // 新增的客户端编号 int connectedClientsCount = 0; // 连接客户端的数量 int isRequestSuccessful = 0; // GET请求是否成功 bool manualSend; // 判断是否是手动触发的发送 bool deviceConnected = false; // 判断是否有设备连接过 bool isSendingAll; // 一键功能测试 状态 bool checkBoxState = true; QJsonObject licenseDataArray; // 用于保存从服务器获取的 data 字段对象 QVector itemButtons; // 项目按键集合 QVector funcItemButtons; // 功能配置项目按键集合 QVector getPicButtons; // 保存两个取图的摄像头的按键的指针 QVector getVideoButtons; // 保存拉视频设备的按键的指针 QList clients; // 客户端处理器集合 QMap clientTimers; // 每个客户端的定时器 QMap devInfoLineEdits;// msg_id 和对应的 QLineEdit 的映射关系 QCheckBox* saveCheckBox; // 保存文件复选框 QPushButton* selectFileButton; // Save Log 按键 QPushButton* clearLogButton; // clear Log 按键 QLineEdit* filePathLineEdit; // 文件路径显示 QLabel* leftLens_imageLabel; // 左边镜头图像显示 QLabel* rightLens_imageLabel; // 右边镜头图像显示 QLabel* videoLabel; // 视频显示 QLineEdit* frontFuncConfigLineEdit; // 前板功能配置编辑框 QLineEdit* backFuncConfigLineEdit; // 后板功能配置编辑框 QTextEdit* licenseHwInfoEdit; // 获取license的硬件信息 QTextEdit* UuidHwInfoEdit; // Uuid的硬件信息 MainWidget* mainWidget; QTabWidget* tabWidget; // 标签页 QWidget* functionTestArea; // 功能测试区 QWidget* functionConfigArea; // 功能配置区 int lastClickedGetPicCamIndex; // 记录上一次点击取图的摄像头的按键索引 int lastClickedGetPicDevIndex; // 记录上一次点击取图的设备的按键索引 int lastClickedGetVideoCamIndex; // 记录上一次点击拉视频的摄像头的按键索引 int lastClickedGetVideoDevIndex; // 记录上一次点击拉视频的设备的按键索引 QTimer* threadStatusTimer; // 检查线程状态的定时器 QTimer* connectionStatusCheckTimer; // 检查连接状态的定时器 QMap clientThreads; QMap clientReadTimers; QMap clients_1; ServiceProvider* mServiceProvider; QTimer* mdnsTimer; void startMdnsService(); void stopMdnsService(); #if TEST_UDP_BROADCAST QUdpSocket* multicastSocket; QTimer* multicastTimer; #endif }; #endif // MAINWIDGET_H