You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AppFlow/GUIDialog/GUICalculateDialog/RunProcess.cpp

88 lines
2.4 KiB
C++

#include "RunProcess.h"
#include "GUIFrame/MainWindow.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppSettings.h"
#include "FITK_Kernel/FITKAppFramework/FITKSignalTransfer.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Kernel/FITKCore/FITKDirFileTools.h"
#include <QFile>
#include <QTextStream>
namespace GUI
{
RunProcess::RunProcess()
{
_process = new QProcess(this);
MainWindow* mianWindow = dynamic_cast<MainWindow*>(FITKAPP->getGlobalData()->getMainWindow());
connect(_process, SIGNAL(readyReadStandardOutput()), this, SLOT(slotProcessOutput()));
connect(_process, SIGNAL(readyReadStandardError()), this, SLOT(slotProcessOutputError()));
connect(_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotProcessFinish(int, QProcess::ExitStatus)));
connect(mianWindow, SIGNAL(sigMainWindowClose()), this, SLOT(slotMainwindowClose()));
}
RunProcess::~RunProcess()
{
if (_process) {
_process->kill();
_process->waitForFinished();
delete _process;
_process = nullptr;
}
}
void RunProcess::start(QString sh)
{
_process->start(sh);
//判断进程是否启动成功
if (!_process->waitForStarted()) {
QString message = tr("Started failed!");
emit FITKAPP->getSignalTransfer()->outputMessageSig(3, message);
emit sigFinish();
}
else {
QString message = tr("Started successfully!");
emit FITKAPP->getSignalTransfer()->outputMessageSig(1, message);
}
}
void RunProcess::kill()
{
if (_process == nullptr)return;
_process->kill();
_process->waitForFinished();
}
void RunProcess::slotProcessOutput()
{
QString message = _process->readAllStandardOutput();
emit FITKAPP->getSignalTransfer()->outputMessageSig(4, message);
}
void RunProcess::slotProcessOutputError()
{
}
void RunProcess::slotProcessFinish(int exitCode, QProcess::ExitStatus exitStatus)
{
switch (exitStatus)
{
case QProcess::NormalExit:
break;
case QProcess::CrashExit:
break;
}
emit sigFinish();
}
void RunProcess::slotMainwindowClose()
{
this->kill();
}
}