95 lines
3.1 KiB
C++
95 lines
3.1 KiB
C++
|
#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();
|
|||
|
}
|