#include "dialogconfig.h" #include "ui_dialogconfig.h" #include #include #include #include #include #include "VrLog.h" DialogConfig::DialogConfig(IVrConfig* devConfig, QWidget *parent) : QDialog(parent), ui(new Ui::DialogConfig), m_vrConfig(devConfig) { ui->setupUi(this); // 隐藏标题栏 setWindowFlags(Qt::FramelessWindowHint); // 获取配置文件路径 QString exePath = QCoreApplication::applicationFilePath(); m_configFilePath = QFileInfo(exePath).absoluteDir().path() + "/config.xml"; // 从配置文件加载数据到界面 LoadConfigToUI(); } DialogConfig::~DialogConfig() { delete ui; } void DialogConfig::LoadConfigToUI() { if (!m_vrConfig) { LOG_ERROR("VrConfig not initialized\n"); return; } try { // 加载配置文件 m_configData = m_vrConfig->LoadConfig(m_configFilePath.toStdString()); // 将算法参数加载到界面控件 const VrAlgorithmParams& params = m_configData.algorithmParams; // 垛型参数(假设这些对应UI中的垛长、垛宽、垛高) ui->lineEdit->setText(QString::number(params.bagParam.bagL)); // 垛长 ui->lineEdit_2->setText(QString::number(params.bagParam.bagW)); // 垛宽 ui->lineEdit_3->setText(QString::number(params.bagParam.bagH)); // 垛高 // 袋型参数 ui->lineEdit_4->setText(QString::number(params.bagParam.bagL)); // 袋长 ui->lineEdit_5->setText(QString::number(params.bagParam.bagW)); // 袋宽 ui->lineEdit_6->setText(QString::number(params.bagParam.bagH)); // 袋高 // 过滤参数 ui->lineEdit_7->setText(QString::number(params.filterParam.continuityTh)); // X过滤 ui->lineEdit_8->setText(QString::number(params.filterParam.outlierTh)); // Y过滤 ui->lineEdit_9->setText(QString::number(params.planeCalibParam.planeHeight)); // Z过滤 LOG_INFO("Configuration loaded to UI successfully\n"); } catch (const std::exception& e) { LOG_ERROR("Failed to load configuration: %s\n", e.what()); // 设置白色字体的错误消息框 QMessageBox msgBox; msgBox.setWindowTitle("错误"); msgBox.setText("加载配置文件失败!"); msgBox.setIcon(QMessageBox::Warning); msgBox.setStyleSheet("QMessageBox { color: white; }"); msgBox.exec(); } } bool DialogConfig::SaveConfigFromUI() { if (!m_vrConfig) { LOG_ERROR("VrConfig not initialized\n"); return false; } try { // 从界面控件读取参数 VrAlgorithmParams& params = m_configData.algorithmParams; // 垛型参数 params.bagParam.bagL = ui->lineEdit->text().toDouble(); // 垛长 params.bagParam.bagW = ui->lineEdit_2->text().toDouble(); // 垛宽 params.bagParam.bagH = ui->lineEdit_3->text().toDouble(); // 垛高 // 袋型参数(这里简化处理,实际可能需要分开) // ui->lineEdit_4, ui->lineEdit_5, ui->lineEdit_6 可以作为袋的单独参数 // 过滤参数 params.filterParam.continuityTh = ui->lineEdit_7->text().toDouble(); // X过滤 params.filterParam.outlierTh = ui->lineEdit_8->text().toInt(); // Y过滤 params.planeCalibParam.planeHeight = ui->lineEdit_9->text().toDouble(); // Z过滤 // 保存配置文件,SaveConfig会自动触发通知回调 bool success = m_vrConfig->SaveConfig(m_configFilePath.toStdString(), m_configData); if (success) { LOG_INFO("Configuration saved successfully\n"); return true; } else { LOG_ERROR("Failed to save configuration\n"); return false; } } catch (const std::exception& e) { LOG_ERROR("Failed to save configuration: %s\n", e.what()); return false; } } void DialogConfig::on_btn_apply_clicked() { if (SaveConfigFromUI()) { // 设置白色字体的成功消息框 QMessageBox msgBox; msgBox.setWindowTitle("成功"); msgBox.setText("配置保存成功!"); msgBox.setIcon(QMessageBox::Information); msgBox.setStyleSheet("QMessageBox { color: white; }"); msgBox.exec(); accept(); // 关闭对话框并返回Accepted } else { // 设置白色字体的失败消息框 QMessageBox msgBox; msgBox.setWindowTitle("失败"); msgBox.setText("配置保存失败,请检查文件权限!"); msgBox.setIcon(QMessageBox::Warning); msgBox.setStyleSheet("QMessageBox { color: white; }"); msgBox.exec(); } } void DialogConfig::on_btn_cancel_clicked() { // 直接关闭窗口,不保存任何更改 reject(); }