183 lines
6.8 KiB
C++
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);
|
|
}
|
|
|