-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexternalprocess.cpp
More file actions
41 lines (33 loc) · 1.33 KB
/
externalprocess.cpp
File metadata and controls
41 lines (33 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "externalprocess.h"
ExternalProcess::ExternalProcess(const QString &name, const QStringList ¶,
QObject *parent = nullptr)
: QObject(parent), process(new QProcess(this))
{
set(name, para, parent);
}
void ExternalProcess::set(const QString &name, const QStringList ¶, QObject *parent = nullptr )
{
this->setParent(parent);
disconnect(process, nullptr, this, nullptr);
process->setProgram(name);
process->setArguments(para);
#ifdef Q_OS_WIN
process->setCreateProcessArgumentsModifier([](QProcess::CreateProcessArguments *args) {
args->startupInfo->dwFlags |= STARTF_USESHOWWINDOW;
args->startupInfo->wShowWindow = SW_HIDE;
});
#endif
connect(process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
this, &ExternalProcess::handleFinished);
}
void ExternalProcess::handleFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
// 获取所有标准输出
QString output = QString::fromLocal8Bit(process->readAllStandardOutput());
// 如果有错误输出也合并
QString errorOutput = QString::fromLocal8Bit(process->readAllStandardError());
if (!errorOutput.isEmpty()) {
output += errorOutput;
}
emit finished(exitCode, exitStatus, output);
}