143 lines
5.4 KiB
C++
143 lines
5.4 KiB
C++
#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"
|
||
|
||
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());
|
||
|
||
QMessageBox::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()) {
|
||
QMessageBox::information(this, "成功", "配置保存成功!");
|
||
accept(); // 关闭对话框并返回Accepted
|
||
} else {
|
||
QMessageBox::warning(this, "失败", "配置保存失败,请检查文件权限!");
|
||
}
|
||
}
|
||
|
||
void DialogConfig::on_btn_cancel_clicked()
|
||
{
|
||
// 直接关闭窗口,不保存任何更改
|
||
reject();
|
||
}
|
||
|
||
|