Manual-Labeling-Tool/Manual-Labeling-Client/WindInverstorDialog/WindInverstorDialog.cpp

183 lines
6.8 KiB
C++

#include "WindInverstorDialog.h"
#include "WindInverseFunction.h"
WindInverstorDialog::WindInverstorDialog(QWidget *parent)
: QMainWindow(parent)
{
setupUI();
connectSlots();
setWindowTitle(u8"风速反演工具");
setMinimumSize(800, 400);
}
WindInverstorDialog::~WindInverstorDialog()
{}
void WindInverstorDialog::browseWindDirFile()
{
QString file = QFileDialog::getOpenFileName(this, u8"选择风速方向文件",
windDirLineEdit->text(),
"Binary files (*.bin);;All files (*.*)");
if (!file.isEmpty()) {
windDirLineEdit->setText(file);
}
}
void WindInverstorDialog::setupUI()
{
// 创建中央部件和主布局
QWidget* centralWidget = new QWidget(this);
setCentralWidget(centralWidget);
QVBoxLayout* mainLayout = new QVBoxLayout(centralWidget);
// 创建文件输入组
QGroupBox* fileGroup = new QGroupBox(u8"文件路径设置", this);
QVBoxLayout* fileLayout = new QVBoxLayout(fileGroup);
// 风速方向文件选择
QHBoxLayout* windDirLayout = new QHBoxLayout();
QLabel* windDirLabel = new QLabel(u8"风速方向文件:", this);
windDirLineEdit = new QLineEdit(this);
windDirLineEdit->setText("D:\\Programs\\SpacetyLabelAIPlante\\Manual-Labeling-Tool\\WindSpeedModel\\TestData\\SAR_EC_20240801\\total_precipitation2024080110_resample.bin");
windDirLineEdit->setMinimumWidth(400);
browseWindDirBtn = new QPushButton(u8"浏览...", this);
windDirLayout->addWidget(windDirLabel);
windDirLayout->addWidget(windDirLineEdit);
windDirLayout->addWidget(browseWindDirBtn);
// 入射角文件选择
QHBoxLayout* incAngleLayout = new QHBoxLayout();
QLabel* incAngleLabel = new QLabel(u8"入射角文件:", this);
incAngleLineEdit = new QLineEdit(this);
incAngleLineEdit->setText("D:\\Programs\\SpacetyLabelAIPlante\\Manual-Labeling-Tool\\WindSpeedModel\\TestData\\SAR_EC_20240801\\4254-DB-IncidenceAngle-GEO.bin");
incAngleLineEdit->setMinimumWidth(400);
browseIncAngleBtn = new QPushButton(u8"浏览...", this);
incAngleLayout->addWidget(incAngleLabel);
incAngleLayout->addWidget(incAngleLineEdit);
incAngleLayout->addWidget(browseIncAngleBtn);
// SAR sigma0文件选择
QHBoxLayout* sarSigmaLayout = new QHBoxLayout();
QLabel* sarSigmaLabel = new QLabel(u8"SAR sigma0文件:", this);
sarSigmaLineEdit = new QLineEdit(this);
sarSigmaLineEdit->setText("D:\\Programs\\SpacetyLabelAIPlante\\Manual-Labeling-Tool\\WindSpeedModel\\TestData\\SAR_EC_20240801\\4254-DB-GEO.bin");
sarSigmaLineEdit->setMinimumWidth(400);
browseSarSigmaBtn = new QPushButton(u8"浏览...", this);
sarSigmaLayout->addWidget(sarSigmaLabel);
sarSigmaLayout->addWidget(sarSigmaLineEdit);
sarSigmaLayout->addWidget(browseSarSigmaBtn);
// 输出文件选择
QHBoxLayout* outputLayout = new QHBoxLayout();
QLabel* outputLabel = new QLabel(u8"输出风速文件:", this);
outputLineEdit = new QLineEdit(this);
outputLineEdit->setText("D:\\Programs\\SpacetyLabelAIPlante\\Manual-Labeling-Tool\\WindSpeedModel\\TestData\\InverserWindSpeed.bin");
outputLineEdit->setMinimumWidth(400);
browseOutputBtn = new QPushButton(u8"浏览...", this);
outputLayout->addWidget(outputLabel);
outputLayout->addWidget(outputLineEdit);
outputLayout->addWidget(browseOutputBtn);
// 添加所有文件路径控件到文件组
fileLayout->addLayout(windDirLayout);
fileLayout->addLayout(incAngleLayout);
fileLayout->addLayout(sarSigmaLayout);
fileLayout->addLayout(outputLayout);
// 创建按钮组
QHBoxLayout* buttonLayout = new QHBoxLayout();
startBtn = new QPushButton(u8"开始反演", this);
cancelBtn = new QPushButton(u8"取消", this);
// 设置按钮样式
startBtn->setStyleSheet("QPushButton { background-color: #4CAF50; color: white; font-weight: bold; padding: 8px 16px; }");
cancelBtn->setStyleSheet("QPushButton { background-color: #f44336; color: white; font-weight: bold; padding: 8px 16px; }");
buttonLayout->addStretch();
buttonLayout->addWidget(startBtn);
buttonLayout->addWidget(cancelBtn);
// 添加到主布局
mainLayout->addWidget(fileGroup);
mainLayout->addStretch();
mainLayout->addLayout(buttonLayout);
}
void WindInverstorDialog::browseIncAngleFile()
{
QString file = QFileDialog::getOpenFileName(this, u8"选择入射角文件",
incAngleLineEdit->text(),
"Binary files (*.bin);;All files (*.*)");
if (!file.isEmpty()) {
incAngleLineEdit->setText(file);
}
}
void WindInverstorDialog::browseSarSigmaFile()
{
QString file = QFileDialog::getOpenFileName(this, u8"选择SAR sigma0文件",
sarSigmaLineEdit->text(),
"Binary files (*.bin);;All files (*.*)");
if (!file.isEmpty()) {
sarSigmaLineEdit->setText(file);
}
}
void WindInverstorDialog::browseOutputFile()
{
QString file = QFileDialog::getSaveFileName(this, u8"选择输出文件",
outputLineEdit->text(),
"Binary files (*.bin);;All files (*.*)");
if (!file.isEmpty()) {
outputLineEdit->setText(file);
}
}
void WindInverstorDialog::startInversion()
{
// 验证文件路径
if (windDirLineEdit->text().isEmpty() ||
incAngleLineEdit->text().isEmpty() ||
sarSigmaLineEdit->text().isEmpty() ||
outputLineEdit->text().isEmpty()) {
QMessageBox::warning(this, u8"警告", u8"请填写所有文件路径!");
return;
}
QString in_wind_dir_path = windDirLineEdit->text();
QString in_inc_angle_path = incAngleLineEdit->text();
QString in_sar_sigma0_path = sarSigmaLineEdit->text();
QString out_wind_speed_path = outputLineEdit->text();
windSpeedInversionProcess(in_wind_dir_path,
in_inc_angle_path,
in_sar_sigma0_path,
out_wind_speed_path);
// 这里添加风速反演的核心处理逻辑
QMessageBox::information(this, u8"提示", u8"风速反演处理结束\n输入文件: " +
windDirLineEdit->text() +
u8"\n输出文件: " + outputLineEdit->text());
}
void WindInverstorDialog::closeApplication()
{
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, u8"确认退出", u8"确定要退出风速反演工具吗?",
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
close();
}
}
void WindInverstorDialog::connectSlots()
{
connect(browseWindDirBtn, &QPushButton::clicked, this, &WindInverstorDialog::browseWindDirFile);
connect(browseIncAngleBtn, &QPushButton::clicked, this, &WindInverstorDialog::browseIncAngleFile);
connect(browseSarSigmaBtn, &QPushButton::clicked, this, &WindInverstorDialog::browseSarSigmaFile);
connect(browseOutputBtn, &QPushButton::clicked, this, &WindInverstorDialog::browseOutputFile);
connect(startBtn, &QPushButton::clicked, this, &WindInverstorDialog::startInversion);
connect(cancelBtn, &QPushButton::clicked, this, &WindInverstorDialog::closeApplication);
}