QProcess类用于启动另一个外部应用程序,并可与之进行通信。该类的运行方式是异步的。QProcess类在外部进程拥有数据或完成时发送一个信号以通知相关的对象。
QProcess的使用模板如下:
class XXX : public XXXX
{
Q_OBJECT
…
private slots:
void errorHandler(QProcess::ProcessError);
void catchOutput();
void catchError();
void stateMonitor(QProcess::ProcessState newState);
void slotStarted();
void slotFinished(int, QProcess::ExitStatus);
…
private:
QProcess p;
…
};
XXX::XXX(…)
{
…
connect(&p, SIGNAL(started()), SLOT(slotStarted()));
connect(&p, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(slotFinished(int, QProcess::ExitStatus));
connect(&p, SIGNAL(error(QProcess::ProcessError)), SLOT(errorHandler (QProcess::ProcessError)));
connect(&p, SIGNAL(readyReadStandardError()), SLOT(catchError()));
connect(&p, SIGNAL(readyReadStandardOutput()), SLOT(catchOutput()));
…
}
XXX:: slotStarted()
{
qDebug()<<”process has started”;
}
XXX:: slotFinished(int exitcode, QProcess::ExitStatus status)
{
if (exitStatus == QProcess::CrashExit) {
…;
} else if (exitCode != 0) {
…;
} else {
…;
}
}
XXX:: errorHandler(QProcess::ProcessError error)
{
if (error == QProcess::FailedToStart) {
…
}
else if( error == QProcess:: Crashed )
{
…
}
else if( error == QProcess:: Timedout )
{
…
}
else if( error == QProcess:: WriteError )
{
…
}
else if( error == QProcess::ReadError )
{
…
}
else if( error == QProcess:: UnknownError )
{
…
}
}
XXX:: catchError()
{
QByteArray newData = process.readAllStandardError();
…
}
XXX::catchOutput()
{
QByteArray newData = process.readAllStandardOutput();
…
}