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

183 lines
6.8 KiB
C++
Raw Normal View History

2025-11-20 09:32:46 +00:00
#include "WindInverstorDialog.h"
#include "WindInverseFunction.h"
WindInverstorDialog::WindInverstorDialog(QWidget *parent)
: QMainWindow(parent)
{
setupUI();
connectSlots();
setWindowTitle(u8"<EFBFBD><EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD>ݹ<EFBFBD><EFBFBD><EFBFBD>");
setMinimumSize(800, 400);
}
WindInverstorDialog::~WindInverstorDialog()
{}
void WindInverstorDialog::browseWindDirFile()
{
QString file = QFileDialog::getOpenFileName(this, u8"ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>",
windDirLineEdit->text(),
"Binary files (*.bin);;All files (*.*)");
if (!file.isEmpty()) {
windDirLineEdit->setText(file);
}
}
void WindInverstorDialog::setupUI()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>벿<EFBFBD><EBB2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QWidget* centralWidget = new QWidget(this);
setCentralWidget(centralWidget);
QVBoxLayout* mainLayout = new QVBoxLayout(centralWidget);
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
QGroupBox* fileGroup = new QGroupBox(u8"<EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", this);
QVBoxLayout* fileLayout = new QVBoxLayout(fileGroup);
// <20><><EFBFBD>ٷ<EFBFBD><D9B7><EFBFBD><EFBFBD>ļ<EFBFBD>ѡ<EFBFBD><D1A1>
QHBoxLayout* windDirLayout = new QHBoxLayout();
QLabel* windDirLabel = new QLabel(u8"<EFBFBD><EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>:", 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"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...", this);
windDirLayout->addWidget(windDirLabel);
windDirLayout->addWidget(windDirLineEdit);
windDirLayout->addWidget(browseWindDirBtn);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ѡ<EFBFBD><D1A1>
QHBoxLayout* incAngleLayout = new QHBoxLayout();
QLabel* incAngleLabel = new QLabel(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>:", 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"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...", this);
incAngleLayout->addWidget(incAngleLabel);
incAngleLayout->addWidget(incAngleLineEdit);
incAngleLayout->addWidget(browseIncAngleBtn);
// SAR sigma0<61>ļ<EFBFBD>ѡ<EFBFBD><D1A1>
QHBoxLayout* sarSigmaLayout = new QHBoxLayout();
QLabel* sarSigmaLabel = new QLabel(u8"SAR sigma0<61>ļ<EFBFBD>:", 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"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...", this);
sarSigmaLayout->addWidget(sarSigmaLabel);
sarSigmaLayout->addWidget(sarSigmaLineEdit);
sarSigmaLayout->addWidget(browseSarSigmaBtn);
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ѡ<EFBFBD><D1A1>
QHBoxLayout* outputLayout = new QHBoxLayout();
QLabel* outputLabel = new QLabel(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>:", this);
outputLineEdit = new QLineEdit(this);
outputLineEdit->setText("D:\\Programs\\SpacetyLabelAIPlante\\Manual-Labeling-Tool\\WindSpeedModel\\TestData\\InverserWindSpeed.bin");
outputLineEdit->setMinimumWidth(400);
browseOutputBtn = new QPushButton(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>...", this);
outputLayout->addWidget(outputLabel);
outputLayout->addWidget(outputLineEdit);
outputLayout->addWidget(browseOutputBtn);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
fileLayout->addLayout(windDirLayout);
fileLayout->addLayout(incAngleLayout);
fileLayout->addLayout(sarSigmaLayout);
fileLayout->addLayout(outputLayout);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5>
QHBoxLayout* buttonLayout = new QHBoxLayout();
startBtn = new QPushButton(u8"<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", this);
cancelBtn = new QPushButton(u8"ȡ<EFBFBD><EFBFBD>", this);
// <20><><EFBFBD>ð<EFBFBD>ť<EFBFBD><C5A5>ʽ
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);
// <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mainLayout->addWidget(fileGroup);
mainLayout->addStretch();
mainLayout->addLayout(buttonLayout);
}
void WindInverstorDialog::browseIncAngleFile()
{
QString file = QFileDialog::getOpenFileName(this, u8"ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>",
incAngleLineEdit->text(),
"Binary files (*.bin);;All files (*.*)");
if (!file.isEmpty()) {
incAngleLineEdit->setText(file);
}
}
void WindInverstorDialog::browseSarSigmaFile()
{
QString file = QFileDialog::getOpenFileName(this, u8"ѡ<EFBFBD><EFBFBD>SAR sigma0<61>ļ<EFBFBD>",
sarSigmaLineEdit->text(),
"Binary files (*.bin);;All files (*.*)");
if (!file.isEmpty()) {
sarSigmaLineEdit->setText(file);
}
}
void WindInverstorDialog::browseOutputFile()
{
QString file = QFileDialog::getSaveFileName(this, u8"ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>",
outputLineEdit->text(),
"Binary files (*.bin);;All files (*.*)");
if (!file.isEmpty()) {
outputLineEdit->setText(file);
}
}
void WindInverstorDialog::startInversion()
{
// <20><>֤<EFBFBD>ļ<EFBFBD>·<EFBFBD><C2B7>
if (windDirLineEdit->text().isEmpty() ||
incAngleLineEdit->text().isEmpty() ||
sarSigmaLineEdit->text().isEmpty() ||
outputLineEdit->text().isEmpty()) {
QMessageBox::warning(this, u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
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);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӷ<EFBFBD><D3B7>ٷ<EFBFBD><D9B7>ݵĺ<DDB5><C4BA>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>߼<EFBFBD>
QMessageBox::information(this, u8"<EFBFBD><EFBFBD>ʾ", u8"<EFBFBD><EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>: " +
windDirLineEdit->text() +
u8"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>: " + outputLineEdit->text());
}
void WindInverstorDialog::closeApplication()
{
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, u8"ȷ<EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>", u8"ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٷ<EFBFBD><EFBFBD>ݹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
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);
}