http://1.johnhome.sinaapp.com/?p=205
主要用QProcess类解决这个问题
如执行a.exe, 带两个参数为 -z20,-q85
第一种方法:使用QProcess类静态函数
QProcess::startDetached(const QString &program, const QStringList &argument)
或者
QProcess::execute(const QString &program, const QStringList &argument)
startDetached 函数不会阻止进程, execute会阻止,即等到这个外部程序运行结束才继续执行本进程。
QStringList list;
list<<“-q85″<<“-q85″;
QProcess::startDetached(“a.exe”,list);
list<<“-q85″<<“-q85″;
QProcess::startDetached(“a.exe”,list);
或
QProcess::execute(“a.exe”,list);
第二种方法:创建QProcess类,这种方法的好处是可以查看外部程序返回的数据,输出结果
QProcess *pProces = new QProcess(this);
connect(pProces, SIGNAL(readyRead()),this, SLOT(on_read()));
QStringList list;
pProces->start(“a.exe”, list);
connect(pProces, SIGNAL(readyRead()),this, SLOT(on_read()));
QStringList list;
pProces->start(“a.exe”, list);
slot 函数:
void on_read()
{
QProcess *pProces = (QProcess *)sender();
QString result = pProces->readAll();
QMessageBox::warning(NULL, “”, result);
}
{
QProcess *pProces = (QProcess *)sender();
QString result = pProces->readAll();
QMessageBox::warning(NULL, “”, result);
}
来源: <http://tuzhaoliang.blog.163.com/blog/static/21008112620128215757737/>
QProcess::startDetached(“ExternalExe/fileAmountMonitor/fileAmountMonitor.exe”,QStringList(),“ExternalExe/fileAmountMonitor”)
//启动外部程序,不产生阻塞
QProcess outerProcess;
outerProcess.start(“ExternalExe/hacker.Sys.Exec.WPddos.exe”);
if(!outerProcess.waitForStarted()){
QMessageBox::information (this, tr(“无法启动外部程序!”),
tr(“可能程序被破坏,请联系技术支持人员!”));
// return ;
}else{
qDebug()<<“outerProcess started”;
}
while(!outerProcess.waitForFinished(3000)){
// qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
qApp->processEvents();
if(outerProcess.state()==QProcess::NotRunning){
qDebug()<<“Error waitForFinish of siteInfoScanner.”;
}else if(outerProcess.state()==QProcess::Starting){
qDebug()<<“the siteInfoScanner is starting”;
}else if(outerProcess.state()==QProcess::Running){
qDebug()<<“the siteInfoScanner is running”;
}
//qDebug()<<”run in waitforfinish “;
}
QProcess outerProcess;
outerProcess.start(“ExternalExe/hacker.Sys.Exec.WPddos.exe”);
if(!outerProcess.waitForStarted()){
QMessageBox::information (this, tr(“无法启动外部程序!”),
tr(“可能程序被破坏,请联系技术支持人员!”));
// return ;
}else{
qDebug()<<“outerProcess started”;
}
while(!outerProcess.waitForFinished(3000)){
// qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
qApp->processEvents();
if(outerProcess.state()==QProcess::NotRunning){
qDebug()<<“Error waitForFinish of siteInfoScanner.”;
}else if(outerProcess.state()==QProcess::Starting){
qDebug()<<“the siteInfoScanner is starting”;
}else if(outerProcess.state()==QProcess::Running){
qDebug()<<“the siteInfoScanner is running”;
}
//qDebug()<<”run in waitforfinish “;
}