2025-06-08 12:48:04 +08:00
|
|
|
|
#include "dialogconfig.h"
|
|
|
|
|
|
#include "ui_dialogconfig.h"
|
2025-06-22 14:08:15 +08:00
|
|
|
|
#include <QMessageBox>
|
|
|
|
|
|
#include <QPushButton>
|
|
|
|
|
|
#include <QtCore/QCoreApplication>
|
|
|
|
|
|
#include <QtCore/QFileInfo>
|
|
|
|
|
|
#include <QtCore/QDir>
|
|
|
|
|
|
#include "VrLog.h"
|
2025-06-08 12:48:04 +08:00
|
|
|
|
|
2025-06-22 14:08:15 +08:00
|
|
|
|
DialogConfig::DialogConfig(IVrConfig* devConfig, QWidget *parent) :
|
2025-06-08 12:48:04 +08:00
|
|
|
|
QDialog(parent),
|
2025-06-22 14:08:15 +08:00
|
|
|
|
ui(new Ui::DialogConfig),
|
|
|
|
|
|
m_vrConfig(devConfig)
|
2025-06-08 12:48:04 +08:00
|
|
|
|
{
|
|
|
|
|
|
ui->setupUi(this);
|
2025-06-22 14:08:15 +08:00
|
|
|
|
|
|
|
|
|
|
// 隐藏标题栏
|
|
|
|
|
|
setWindowFlags(Qt::FramelessWindowHint);
|
|
|
|
|
|
|
|
|
|
|
|
// 获取配置文件路径
|
|
|
|
|
|
QString exePath = QCoreApplication::applicationFilePath();
|
|
|
|
|
|
m_configFilePath = QFileInfo(exePath).absoluteDir().path() + "/config.xml";
|
|
|
|
|
|
|
|
|
|
|
|
// 从配置文件加载数据到界面
|
|
|
|
|
|
LoadConfigToUI();
|
2025-06-08 12:48:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DialogConfig::~DialogConfig()
|
|
|
|
|
|
{
|
|
|
|
|
|
delete ui;
|
|
|
|
|
|
}
|
2025-06-22 14:08:15 +08:00
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
}
|