• 4076阅读
  • 2回复

[提问]Qt QProcess的使用 [复制链接]

上一主题 下一主题
离线小鸟一只
 
只看楼主 倒序阅读 楼主  发表于: 2013-03-11
关键词: QProcess
Qt中使用QProcess类掉用其它的程序,然后等调用结束后在执行其它动作,结果出错了。
比如说,我要给某台设备升级,而升级文件是压缩文件,这样我们在升级前,需要先将升级文件解压,目前调用的是7z.exe去解压的,而解压是成功了的。但是升级时确失败了,我的代码结构大致如下,
QProcess pro;
pro.execute("7z.exe",commandLine);
upgrade();
结果upgrade()函数在解压之前就完成了,导致升级失败,pro.execute("7z.exe",commandLine);就像开辟了一个次线程似的。

然后我就将代码修改至如下,
QProcess pro;
pro.execute("7z.exe",commandLine);
if(pro.waitForFinished())
{
       upgrade();
}

结果发现upgrade()函数永远不执行。

最后我用改成如下,
QProcess pro;
pro.execute("7z.exe",commandLine);
pro.waitForFinished(3000)
upgrade();
结果还是先执行upgrade(),再执行pro.execute("7z.exe",commandLine);

不知道大家有没有好的方法,能够使得pro.execute("7z.exe",commandLine);先执行完,然后在去执行upgrade();

多谢!
离线realfan

只看该作者 1楼 发表于: 2013-03-12
pro.waitForFinished(3000)
改成
pro.waitForFinished(-1)
试试

不行的话,再把pro.execute改成pro.start
离线realfan

只看该作者 2楼 发表于: 2013-03-12
另外,建议用QProcess的finished信号,触发槽函数,在槽函数中调用 upgrade();
connect(pProcess, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(slotProcFinished(int , QProcess::ExitStatus)));

在slotProcFinished中调用upgrade();
快速回复
限100 字节
 
上一个 下一个