Files
Compiler_GUI/backend/compileprocessmanager.cpp

52 lines
1.5 KiB
C++

#include "compileprocessmanager.h"
#include <QProcess>
CompileProcessManager::CompileProcessManager(QObject *parent)
: QObject(parent)
{
m_process = new QProcess(this);
connect(m_process, &QProcess::finished,
this, &CompileProcessManager::onProcessFinished);
}
void CompileProcessManager::runCompile(const QString &sourceCode)
{
if (m_process->state() != QProcess::NotRunning) {
// 简单处理:如果已经在运行,就先杀掉,或直接返回
m_process->kill();
m_process->waitForFinished();
}
// TODO: 这里根据你的编译器协议生成指令和参数
// 假设你已存在一个后端可执行文件 "my_compiler_backend"
QString program = "my_compiler_backend";
QStringList args = buildArguments(sourceCode);
m_process->setProgram(program);
m_process->setArguments(args);
m_process->start();
}
QStringList CompileProcessManager::buildArguments(const QString &sourceCode)
{
QStringList args;
// TODO: 把 sourceCode 写入临时文件 / 管道 / 特定协议
// 这里只是示例:假设后端接受一个 -code "xxx" 的参数
args << "-code" << sourceCode;
return args;
}
void CompileProcessManager::onProcessFinished(int exitCode, QProcess::ExitStatus status)
{
Q_UNUSED(status);
QString stdoutText = QString::fromLocal8Bit(m_process->readAllStandardOutput());
QString stderrText = QString::fromLocal8Bit(m_process->readAllStandardError());
emit compileFinished(stdoutText, stderrText, exitCode);
}