#include "dialogconfig.h" #include "ui_dialogconfig.h" #include #include #include #include #include #include #include #include "VrLog.h" #include "PathManager.h" DialogConfig::DialogConfig(IVrConfig* devConfig, QWidget *parent) : QDialog(parent), ui(new Ui::DialogConfig), m_vrConfig(devConfig) { ui->setupUi(this); // 隐藏标题栏 setWindowFlags(Qt::FramelessWindowHint); // 获取配置文件路径 m_configFilePath = PathManager::GetConfigFilePath(); // 从配置文件加载数据到界面 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; LOG_INFO("LoadConfigToUI: pileL:%.1f, pileW:%.1f, pileH:%.1f, bagL:%.1f, bagW:%.1f, bagH:%.1f\n", params.pileParam.pileL, params.pileParam.pileW, params.pileParam.pileH, params.bagParam.bagL, params.bagParam.bagW, params.bagParam.bagH); // 垛型参数 ui->lineEdit_pile_length->setText(QString::number(params.pileParam.pileL)); // 垛长 ui->lineEdit_pile_width->setText(QString::number(params.pileParam.pileW)); // 垛宽 ui->lineEdit_pile_height->setText(QString::number(params.pileParam.pileH)); // 垛高 // 袋型参数 ui->lineEdit_bag_length->setText(QString::number(params.bagParam.bagL)); // 袋长 ui->lineEdit_bag_width->setText(QString::number(params.bagParam.bagW)); // 袋宽 ui->lineEdit_bag_height->setText(QString::number(params.bagParam.bagH)); // 袋高 // 过滤参数 ui->lineEdit_filter_x->setText(QString::number(params.filterParam.continuityTh)); // X过滤 ui->lineEdit_filter_y->setText(QString::number(params.filterParam.outlierTh)); // Y过滤 ui->lineEdit_filter_z->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.pileParam.pileL = ui->lineEdit_pile_length->text().toDouble(); // 垛长 params.pileParam.pileW = ui->lineEdit_pile_width->text().toDouble(); // 垛宽 params.pileParam.pileH = ui->lineEdit_pile_height->text().toDouble(); // 垛高 // 袋型参数 params.bagParam.bagL = ui->lineEdit_bag_length->text().toDouble(); // 袋长 params.bagParam.bagW = ui->lineEdit_bag_width->text().toDouble(); // 袋宽 params.bagParam.bagH = ui->lineEdit_bag_height->text().toDouble(); // 袋高 // 过滤参数 params.filterParam.continuityTh = ui->lineEdit_filter_x->text().toDouble(); // X过滤 params.filterParam.outlierTh = ui->lineEdit_filter_y->text().toInt(); // Y过滤 params.planeCalibParam.planeHeight = ui->lineEdit_filter_z->text().toDouble(); // Z过滤 LOG_INFO("SaveConfigFromUI: pileL:%.1f, pileW:%.1f, pileH:%.1f, bagL:%.1f, bagW:%.1f, bagH:%.1f, continuityTh:%.1f, outlierTh:%d, planeHeight:%.1f\n", params.pileParam.pileL, params.pileParam.pileW, params.pileParam.pileH, params.bagParam.bagL, params.bagParam.bagW, params.bagParam.bagH, params.filterParam.continuityTh, params.filterParam.outlierTh, params.planeCalibParam.planeHeight); LOG_DEBUG("Starting to save configuration to file: %s\n", m_configFilePath.toStdString().c_str()); // 保存配置文件,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(); }