1 #include "processhandler.h"
2
ProcessHandler()3 ProcessHandler::ProcessHandler():m_process(Q_NULLPTR),
4 m_mode(QProcess::MergedChannels),
5 m_inputMode(QProcess::ManagedInputChannel)
6 {
7
8 }
9
~ProcessHandler()10 ProcessHandler::~ProcessHandler()
11 {
12 if(m_process != Q_NULLPTR)
13 {
14 this->stop();
15 delete m_process;
16 m_process = Q_NULLPTR;
17 }
18 }
19
setProcessChannelMode(QProcess::InputChannelMode inputMode,QProcess::ProcessChannelMode mode)20 void ProcessHandler::setProcessChannelMode(QProcess::InputChannelMode inputMode, QProcess::ProcessChannelMode mode)
21 {
22 m_mode = mode;
23 m_inputMode = inputMode;
24 }
25
start(const QString & program,QStringList arg)26 void ProcessHandler::start(const QString &program, QStringList arg)
27 {
28 if(m_process == Q_NULLPTR)
29 {
30 m_process = new QProcess;
31
32 // QObject::connect(m_process, &QProcess::readyReadStandardOutput, m_process, [this](){
33 // processMessage(m_process->readAllStandardOutput());
34 // });
35
36 QObject::connect(m_process, &QProcess::readyRead, m_process, [this](){
37 processMessage(m_process->readAll());
38 });
39 }
40 m_process->setProcessChannelMode(m_mode);
41 m_process->setInputChannelMode(m_inputMode);
42 if(m_process->isOpen())
43 {
44 this->stop();
45 }
46
47 if(arg.isEmpty())
48 {
49 m_process->start(program);
50
51 }else{
52 m_process->start(program, arg);
53 }
54 }
55
stop()56 void ProcessHandler::stop()
57 {
58 if(m_process != Q_NULLPTR)
59 {
60 m_process->kill();
61 m_process->waitForFinished();
62 }
63 }
64
send(const QString & cmd)65 void ProcessHandler::send(const QString &cmd)
66 {
67 if(m_process->isOpen())
68 {
69 m_process->write(cmd.toLocal8Bit());
70 m_process->waitForBytesWritten(1000);
71 }
72 }
73