Categories
不学无术

在Qt中如何调用外部程序、显示输出

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);

 

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);

slot 函数:

void on_read()
{
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 “;
}

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.