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 {
- …;
- }
- }
- 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();
- …
- }