1、启动外部程序一体式:start()外部程序启动后,随着界面主程序的退出。
void QProcess::start(const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite)
QProcess *process=new QProcess;
process->start("C:/Prject/Yulei.exe", QStringList("C:/Prject/Yulei.exe"));
process->waitForStarted();
process->waitForFinished();
QString errOut=process->readAllStandardError();
QString allOutStr=process->readAllStandardOutput();
注:参数二、三均可省略;
当只有参数一时,exe文件路径不能带中文、空格;
当有参数二时,路径可含空格;
waitForFinished的超时机制,Qt界面主线程的开启QProcess的等待时长只有30秒。当超过默认时限,无论外部程序是否运行完,QProcess 直接接收外部程序输出结果(可能是执行的控制台输出信息),即空的输出信息。当外部程序计算复杂时,因时限影响,导致我们无法接受正常返回信息。这时需要设置参数即process->waitForFinished(-1)直到执行完成。
2、启动外部程序分离式:startDetached()外部程序启动后,不会随着界面主程序的退出而退出。
void QProcess::startDetached(const QString & program, const QStringList & arguments, const QString & workingDirectory = QString(), qint64 * pid = 0)
3、关闭后台进程 。
//关闭后台Yulei.exe进程,阻塞式运行,一直占用cpu,成功返回0,失败返回1
int reInt = QProcess::execute("taskkill /f /im Yulei.exe");
qDebug()<<"reInt:"<<reInt;