xref: /OK3568_Linux_fs/app/forlinx/flapp/src/libs/core/processhandler.cpp (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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