191 lines
6.5 KiB
C++
191 lines
6.5 KiB
C++
|
|
#include "dialogalgoarg.h"
|
||
|
|
#include "ui_dialogalgoarg.h"
|
||
|
|
#include <QMessageBox>
|
||
|
|
#include <QPushButton>
|
||
|
|
#include <QtCore/QCoreApplication>
|
||
|
|
#include <QtCore/QFileInfo>
|
||
|
|
#include <QtCore/QDir>
|
||
|
|
#include <QtCore/QStandardPaths>
|
||
|
|
#include <QtCore/QFile>
|
||
|
|
#include <QJsonDocument>
|
||
|
|
#include <QJsonObject>
|
||
|
|
#include <QVariant>
|
||
|
|
#include "PathManager.h"
|
||
|
|
#include "StyledMessageBox.h"
|
||
|
|
#include <algorithm>
|
||
|
|
|
||
|
|
#include "VrLog.h"
|
||
|
|
|
||
|
|
DialogAlgoarg::DialogAlgoarg(IVrBeltTearingConfig* beltTearingConfig, const QMap<QString, ServerInfo>& serverInfos, QWidget *parent)
|
||
|
|
: QDialog(parent)
|
||
|
|
, ui(new Ui::DialogAlgoarg)
|
||
|
|
, m_beltTearingConfig(beltTearingConfig)
|
||
|
|
, m_serverInfos(serverInfos)
|
||
|
|
{
|
||
|
|
ui->setupUi(this);
|
||
|
|
|
||
|
|
// 隐藏标题栏
|
||
|
|
setWindowFlags(Qt::FramelessWindowHint);
|
||
|
|
|
||
|
|
// 设置服务器选择组合框
|
||
|
|
setupServerComboBox();
|
||
|
|
|
||
|
|
// 连接服务器选择变化信号
|
||
|
|
connect(ui->comboBox_serverSelect, &QComboBox::currentTextChanged, this, &DialogAlgoarg::on_serverComboBox_currentTextChanged);
|
||
|
|
}
|
||
|
|
|
||
|
|
DialogAlgoarg::~DialogAlgoarg()
|
||
|
|
{
|
||
|
|
delete ui;
|
||
|
|
}
|
||
|
|
|
||
|
|
void DialogAlgoarg::Init()
|
||
|
|
{
|
||
|
|
requestParamFromServer();
|
||
|
|
}
|
||
|
|
|
||
|
|
void DialogAlgoarg::setupServerComboBox()
|
||
|
|
{
|
||
|
|
ui->comboBox_serverSelect->clear();
|
||
|
|
|
||
|
|
int index = 0;
|
||
|
|
for (auto it = m_serverInfos.begin(); it != m_serverInfos.end(); ++it) {
|
||
|
|
// 使用 ServerInfo 的 name 字段作为显示文本
|
||
|
|
QString displayName = QString::fromStdString(it.value().name);
|
||
|
|
// 存储索引作为用户数据
|
||
|
|
ui->comboBox_serverSelect->addItem(displayName, QVariant(index));
|
||
|
|
index++;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void DialogAlgoarg::requestParamFromServer()
|
||
|
|
{
|
||
|
|
// 获取当前选择的服务器索引
|
||
|
|
int selectedIndex = ui->comboBox_serverSelect->currentData().toInt();
|
||
|
|
|
||
|
|
if (selectedIndex < 0 || selectedIndex >= m_serverInfos.size()) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 根据索引获取对应的服务器名称
|
||
|
|
auto it = m_serverInfos.begin();
|
||
|
|
std::advance(it, selectedIndex);
|
||
|
|
QString selectedServer = it.key();
|
||
|
|
|
||
|
|
LOG_DEBUG("request param from : %s \n", selectedServer.toStdString().c_str());
|
||
|
|
|
||
|
|
// 同时从服务器加载数据
|
||
|
|
emit requestServerData(selectedServer);
|
||
|
|
}
|
||
|
|
|
||
|
|
void DialogAlgoarg::on_serverComboBox_currentTextChanged(const QString &text)
|
||
|
|
{
|
||
|
|
requestParamFromServer();
|
||
|
|
}
|
||
|
|
|
||
|
|
void DialogAlgoarg::sendParametersToServer()
|
||
|
|
{
|
||
|
|
// 获取当前选择的服务器索引
|
||
|
|
int selectedIndex = ui->comboBox_serverSelect->currentData().toInt();
|
||
|
|
if (selectedIndex < 0 || selectedIndex >= m_serverInfos.size()) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 根据索引获取对应的服务器名称
|
||
|
|
auto it = m_serverInfos.begin();
|
||
|
|
std::advance(it, selectedIndex);
|
||
|
|
QString selectedServer = it.key();
|
||
|
|
|
||
|
|
// 创建JSON格式的参数数据
|
||
|
|
QJsonObject paramJson;
|
||
|
|
paramJson["command"] = "setAlgorithmParams";
|
||
|
|
paramJson["scanXScale"] = ui->lineEdit_scanXScale->text().toDouble();
|
||
|
|
paramJson["scanYScale"] = ui->lineEdit_scanYScale->text().toDouble();
|
||
|
|
paramJson["differnceBinTh"] = ui->lineEdit_differnceBinTh->text().toDouble();
|
||
|
|
|
||
|
|
paramJson["tearingMinLen"] = ui->lineEdit_tearingMinLen->text().toDouble();
|
||
|
|
paramJson["tearingMinGap"] = ui->lineEdit_tearingMinGap->text().toDouble();
|
||
|
|
|
||
|
|
paramJson["sameGapTh"] = ui->lineEdit_sameGapTh->text().toDouble();
|
||
|
|
paramJson["gapChkWin"] = ui->lineEdit_gapChkWin->text().toInt();
|
||
|
|
|
||
|
|
QJsonDocument doc(paramJson);
|
||
|
|
QByteArray data = doc.toJson();
|
||
|
|
|
||
|
|
// 这里需要通过网络发送给对应的服务器
|
||
|
|
// 具体实现将在Presenter中完成
|
||
|
|
emit parametersChanged(selectedServer, data);
|
||
|
|
}
|
||
|
|
|
||
|
|
void DialogAlgoarg::onServerDataReceived(const QString& serverName, const QJsonObject& data)
|
||
|
|
{
|
||
|
|
// 更新UI显示从服务器获取的参数
|
||
|
|
updateUIWithServerData(data);
|
||
|
|
|
||
|
|
// StyledMessageBox::information(this, "提示", "从服务器加载算法参数完成!");
|
||
|
|
}
|
||
|
|
|
||
|
|
void DialogAlgoarg::updateUIWithServerData(const QJsonObject& serverData)
|
||
|
|
{
|
||
|
|
// 从服务器返回的数据中提取算法参数并更新UI
|
||
|
|
// 检查数据是否是配置响应格式
|
||
|
|
QJsonObject algorithmParams;
|
||
|
|
if (serverData.contains("config") && serverData["config"].isObject()) {
|
||
|
|
// 从 config 字段中提取算法参数(服务器返回的配置响应格式)
|
||
|
|
QJsonObject configObj = serverData["config"].toObject();
|
||
|
|
if (configObj.contains("algorithmParams") && configObj["algorithmParams"].isObject()) {
|
||
|
|
algorithmParams = configObj["algorithmParams"].toObject();
|
||
|
|
}
|
||
|
|
} else if (serverData.contains("algorithmParams") && serverData["algorithmParams"].isObject()) {
|
||
|
|
// 直接从根字段提取算法参数(旧格式或其他响应格式)
|
||
|
|
algorithmParams = serverData["algorithmParams"].toObject();
|
||
|
|
}
|
||
|
|
|
||
|
|
// 更新算法参数UI
|
||
|
|
if (!algorithmParams.isEmpty()) {
|
||
|
|
if (algorithmParams.contains("scanXScale")) {
|
||
|
|
ui->lineEdit_scanXScale->setText(QString::number(algorithmParams["scanXScale"].toDouble()));
|
||
|
|
}
|
||
|
|
|
||
|
|
if (algorithmParams.contains("scanYScale")) {
|
||
|
|
ui->lineEdit_scanYScale->setText(QString::number(algorithmParams["scanYScale"].toDouble()));
|
||
|
|
}
|
||
|
|
|
||
|
|
if (algorithmParams.contains("differnceBinTh")) {
|
||
|
|
ui->lineEdit_differnceBinTh->setText(QString::number(algorithmParams["differnceBinTh"].toDouble()));
|
||
|
|
}
|
||
|
|
|
||
|
|
if (algorithmParams.contains("tearingMinLen")) {
|
||
|
|
ui->lineEdit_tearingMinLen->setText(QString::number(algorithmParams["tearingMinLen"].toDouble()));
|
||
|
|
}
|
||
|
|
|
||
|
|
// 处理额外的参数
|
||
|
|
if (algorithmParams.contains("tearingMinGap")) {
|
||
|
|
ui->lineEdit_tearingMinGap->setText(QString::number(algorithmParams["tearingMinGap"].toDouble()));
|
||
|
|
}
|
||
|
|
|
||
|
|
if (algorithmParams.contains("sameGapTh")) {
|
||
|
|
ui->lineEdit_sameGapTh->setText(QString::number(algorithmParams["sameGapTh"].toDouble()));
|
||
|
|
}
|
||
|
|
|
||
|
|
if (algorithmParams.contains("gapChkWin")) {
|
||
|
|
ui->lineEdit_gapChkWin->setText(QString::number(algorithmParams["gapChkWin"].toInt()));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void DialogAlgoarg::on_btn_camer_ok_clicked()
|
||
|
|
{
|
||
|
|
// 发送参数到服务器
|
||
|
|
sendParametersToServer();
|
||
|
|
|
||
|
|
StyledMessageBox::information(this, "成功", "配置保存成功并已发送到服务器!");
|
||
|
|
accept();
|
||
|
|
}
|
||
|
|
|
||
|
|
void DialogAlgoarg::on_btn_camer_cancel_clicked()
|
||
|
|
{
|
||
|
|
// 直接关闭窗口,不保存任何更改
|
||
|
|
reject();
|
||
|
|
}
|