GrabBag/GrabBagApp/dialogconfig.cpp

144 lines
5.3 KiB
C++
Raw Permalink Normal View History

2025-06-08 12:48:04 +08:00
#include "dialogconfig.h"
#include "ui_dialogconfig.h"
#include <QMessageBox>
#include <QPushButton>
#include <QtCore/QCoreApplication>
#include <QtCore/QFileInfo>
#include <QtCore/QDir>
#include <QtCore/QStandardPaths>
#include <QtCore/QFile>
#include "VrLog.h"
#include "PathManager.h"
#include "StyledMessageBox.h"
2025-06-08 12:48:04 +08:00
DialogConfig::DialogConfig(IVrConfig* devConfig, QWidget *parent) :
2025-06-08 12:48:04 +08:00
QDialog(parent),
ui(new Ui::DialogConfig),
m_vrConfig(devConfig)
2025-06-08 12:48:04 +08:00
{
ui->setupUi(this);
// 隐藏标题栏
setWindowFlags(Qt::FramelessWindowHint);
// 获取配置文件路径
m_configFilePath = PathManager::GetConfigFilePath();
// 从配置文件加载数据到界面
LoadConfigToUI();
2025-06-08 12:48:04 +08:00
}
DialogConfig::~DialogConfig()
{
delete ui;
}
void DialogConfig::LoadConfigToUI()
{
if (!m_vrConfig) {
LOG_ERROR("GrabBagConfig 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(-1.0)); // Z过滤
LOG_INFO("Configuration loaded to UI successfully\n");
} catch (const std::exception& e) {
LOG_ERROR("Failed to load configuration: %s\n", e.what());
StyledMessageBox::critical(this, "错误", "加载配置文件失败!");
}
}
bool DialogConfig::SaveConfigFromUI()
{
if (!m_vrConfig) {
LOG_ERROR("GrabBagConfig 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\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);
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()) {
StyledMessageBox::information(this, "成功", "配置保存成功!");
accept(); // 关闭对话框并返回Accepted
} else {
StyledMessageBox::warning(this, "失败", "配置保存失败,请检查文件权限!");
}
}
void DialogConfig::on_btn_cancel_clicked()
{
// 直接关闭窗口,不保存任何更改
reject();
}