GrabBag/GrabBagApp/dialogconfig.cpp

144 lines
5.4 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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"
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("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();
}