#include "dialogdeviceconfig.h" #include "ui_dialogdeviceconfig.h" #include "BagThreadPositionPresenter.h" #include "ConfigManager.h" #include "PathManager.h" #include "StyledMessageBox.h" #include "VrLog.h" DialogDeviceConfig::DialogDeviceConfig(QWidget *parent) : QDialog(parent) , ui(new Ui::DialogDeviceConfig) , m_presenter(nullptr) { ui->setupUi(this); // 初始化字节序下拉框选项 ui->comboEndian->addItem(QString::fromUtf8("大端"), true); ui->comboEndian->addItem(QString::fromUtf8("小端"), false); } DialogDeviceConfig::~DialogDeviceConfig() { delete ui; } void DialogDeviceConfig::SetPresenter(BagThreadPositionPresenter* presenter) { m_presenter = presenter; loadConfig(); } void DialogDeviceConfig::loadConfig() { if (!m_presenter || !m_presenter->GetConfigManager()) { return; } ConfigResult configResult = m_presenter->GetConfigManager()->GetConfigResult(); // 相机配置 if (!configResult.cameraList.empty()) { ui->editCameraIP->setText(QString::fromStdString(configResult.cameraList[0].ip)); ui->spinBaseDistance->setValue(configResult.cameraList[0].baseDistance); } // 协议配置 ui->editModbusIP->setText(QString::fromStdString(configResult.modbusIP)); ui->comboEndian->setCurrentIndex(configResult.modbusBigEndian ? 0 : 1); } void DialogDeviceConfig::on_btnSave_clicked() { if (!m_presenter || !m_presenter->GetConfigManager()) { StyledMessageBox::warning(this, QString::fromUtf8("错误"), QString::fromUtf8("系统未初始化")); return; } // 获取当前完整配置 SystemConfig systemConfig = m_presenter->GetConfigManager()->GetConfig(); // 更新相机配置 if (!systemConfig.configResult.cameraList.empty()) { systemConfig.configResult.cameraList[0].ip = ui->editCameraIP->text().toStdString(); systemConfig.configResult.cameraList[0].baseDistance = ui->spinBaseDistance->value(); } // 更新协议配置 systemConfig.configResult.modbusIP = ui->editModbusIP->text().toStdString(); systemConfig.configResult.modbusBigEndian = ui->comboEndian->currentData().toBool(); // 更新配置到ConfigManager if (!m_presenter->GetConfigManager()->UpdateFullConfig(systemConfig)) { StyledMessageBox::warning(this, QString::fromUtf8("错误"), QString::fromUtf8("更新配置失败")); return; } // 保存到文件 QString configPath = PathManager::GetInstance().GetConfigFilePath(); if (!m_presenter->GetConfigManager()->SaveConfigToFile(configPath.toStdString())) { StyledMessageBox::warning(this, QString::fromUtf8("错误"), QString::fromUtf8("保存配置文件失败")); return; } // 实时应用基准距离 if (!systemConfig.configResult.cameraList.empty()) { double baseDistance = systemConfig.configResult.cameraList[0].baseDistance; int cameraIndex = systemConfig.configResult.cameraList[0].index; m_presenter->ApplyBaseDistance(cameraIndex, baseDistance); } // 实时应用ModbusTCP配置 std::string modbusIP = systemConfig.configResult.modbusIP; bool bigEndian = systemConfig.configResult.modbusBigEndian; m_presenter->ApplyModbusConfig(modbusIP, bigEndian); StyledMessageBox::information(this, QString::fromUtf8("提示"), QString::fromUtf8("配置保存成功")); LOG_INFO("[DialogDeviceConfig] 配置已保存: 相机IP=%s, 基准距离=%.1f, ModbusIP=%s, 大端=%s\n", ui->editCameraIP->text().toStdString().c_str(), ui->spinBaseDistance->value(), modbusIP.c_str(), bigEndian ? "true" : "false"); } void DialogDeviceConfig::on_btnCancel_clicked() { close(); }