RasterProcessTool/Toolbox/KJ135WBJYAlgInterfaceToolbox/QWBFZExcuteAlgProgramDialog...

95 lines
3.1 KiB
C++
Raw Normal View History

2025-05-09 09:06:07 +00:00
#include "QWBFZExcuteAlgProgramDialog.h"
#include "ui_QWBFZExcuteAlgProgramDialog.h"
#include "KJ135WBJYAlgWidgetComponet.h"
#include <QProcess>
#include <qt_windows.h>
QWBFZExcuteAlgProgramDialog::QWBFZExcuteAlgProgramDialog(QWidget *parent)
: QDialog(parent),
ui(new Ui::QWBFZExcuteAlgProgramDialogClass),
xmlfileSelectWidget(new FileSelectWidget(this)),
exefileSelectWidget(new FileSelectWidget(this))
{
ui->setupUi(this);
// <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
exefileSelectWidget->setParaName(u8"<EFBFBD>㷨ִ<EFBFBD><EFBFBD>exe");
exefileSelectWidget->setParaChsName(u8"<EFBFBD>㷨ִ<EFBFBD><EFBFBD>exe");
exefileSelectWidget->setDescription(u8"<EFBFBD>㷨ִ<EFBFBD><EFBFBD>exe");
exefileSelectWidget->setDatatype(u8"string");
exefileSelectWidget->setParaType(u8"Value");
exefileSelectWidget->setComponentType(ComponentType::FileSelect);
exefileSelectWidget->initUI();
xmlfileSelectWidget->setParaName(u8"<EFBFBD>㷨xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>");
xmlfileSelectWidget->setParaChsName(u8"<EFBFBD>㷨xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>");
xmlfileSelectWidget->setDescription(u8"<EFBFBD>㷨xml<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>");
xmlfileSelectWidget->setDatatype(u8"string");
xmlfileSelectWidget->setParaType(u8"Value");
xmlfileSelectWidget->setComponentType(ComponentType::FileSelect);
xmlfileSelectWidget->initUI();
ui->verticalLayout_InParamsRegion->addWidget(exefileSelectWidget);
ui->verticalLayout_InParamsRegion->addWidget(xmlfileSelectWidget);
// <20><><EFBFBD><EFBFBD><EFBFBD>źŲ<C5BA>
QObject::connect(ui->buttonBox, SIGNAL(accepted()), this, SLOT(onacceptButton_Clicked()));
QObject::connect(ui->buttonBox, SIGNAL(rejected()), this, SLOT(oncancelButton_Clicked()));
this->show();
}
QWBFZExcuteAlgProgramDialog::~QWBFZExcuteAlgProgramDialog()
{
delete ui;
}
void QWBFZExcuteAlgProgramDialog::onacceptButton_Clicked()
{
QString xmlfilepath = xmlfileSelectWidget->getValue();
QString exefilepath = exefileSelectWidget->getValue();
qDebug() <<"xmlpath :\t" << xmlfilepath;
qDebug() << "exepath :\t" << exefilepath;
// <20><>ȡexe<78>ļ<EFBFBD><C4BC>ļ<EFBFBD><C4BC><EFBFBD>·<EFBFBD><C2B7>
QString exeDirPath = QFileInfo(exefilepath).absolutePath();
qDebug() << "exedirpath :\t" << exeDirPath;
// <20><><EFBFBD><EFBFBD>cmd<6D><64><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>exe<78>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ŀ¼<C4BF><C2BC>Ȼ<EFBFBD><C8BB>ִ<EFBFBD><D6B4>exe<78>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊxml<6D>ļ<EFBFBD>·<EFBFBD><C2B7>
QString cmdstr = QString("cd /d %1 && %2 %3").arg(exeDirPath).arg(exefilepath).arg(xmlfilepath);
qDebug() << "cmdstr :\t" << cmdstr;
// ִ<><D6B4>cmd<6D><64><EFBFBD><EFBFBD>
QProcess* process = new QProcess(this);
process->setProcessChannelMode(QProcess::MergedChannels);
// <20><><EFBFBD><EFBFBD>Windows API<50><49><EFBFBD><EFBFBD>ǿ<EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
process->setCreateProcessArgumentsModifier([](QProcess::CreateProcessArguments* args) {
args->flags |= CREATE_NEW_CONSOLE; // <20><><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>
args->startupInfo->wShowWindow = SW_SHOWNORMAL; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES; // <20><><EFBFBD>ñ<EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>[3,7](@ref)
});
// ʵʱ<CAB5><CAB1>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
connect(process, &QProcess::readyRead, [=]() {
QString output = QString::fromLocal8Bit(process->readAll());
qDebug() << "CMD Output:" << output;
});
// <20><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD>·<EFBFBD><C2B7><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>
process->start("cmd.exe", QStringList() << "/k" << cmdstr);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
connect(process, &QProcess::errorOccurred, [](QProcess::ProcessError error) {
qDebug() << "Error:" << error;
});
}
void QWBFZExcuteAlgProgramDialog::oncancelButton_Clicked()
{
this->close();
}