当前位置:编程学习 > wap >>

使用QProcess启动一个程序,如果通过该程序界面的关闭按钮关闭程序,如何在qt中监控到该程序已关闭?

请教大牛,我使用QProcess启动一个程序后,再通过该程序界面的关闭按钮关闭该程序,我如何在qt中监控到该程序已关闭? QProcess 关闭进程 --------------------编程问答-------------------- process有自己的状态,QProcess::Running,QProcess::NotRunning。
需要用的时候判断一下状态process的state就行了。如果需要一直检查,那就需要用定时器了。 --------------------编程问答-------------------- 可以使用进程间的通信机制,也就是说进程关闭时,向其父进程发送1个通知消息,这样就可以不用定时器,时刻检查了 --------------------编程问答--------------------
请问yanbin_1985525和LazyDreamHunter:
QProcess的state()启动进程后,其成员函数state()变为Running状态,再通过kill()关闭进程,state()变为NotRunning状态,这都测试正确。。。可是我在启动程序界面的右上角,点击"X"关闭按钮关闭启动的进程时,state()仍然为Running状态,没有变为NotRunning状态,此时我就监控不到该进程已关闭,什么原因?  这个问题怎么去解决? 谢谢!   --------------------编程问答-------------------- 请问yanbin_1985525和LazyDreamHunter:
QProcess的start()启动进程后,其成员函数state()变为Running状态,再通过kill()关闭进程,state()变为NotRunning状态,这都测试正确。。。可是我在启动程序界面的右上角,点击"X"关闭按钮关闭启动的进程时,state()仍然为Running状态,没有变为NotRunning状态,此时我就监控不到该进程已关闭,什么原因?  这个问题怎么去解决? 谢谢! --------------------编程问答-------------------- 你启动的那个exe,已经被受主程序控制了,他也没法告诉你它什么时候关闭,除非如楼上所说,使用进程间的通讯来解决此问题 --------------------编程问答--------------------
引用 5 楼 Esonpo 的回复:
你启动的那个exe,已经被受主程序控制了,他也没法告诉你它什么时候关闭,除非如楼上所说,使用进程间的通讯来解决此问题

麻烦请教一下,您说的进程间通信是指采用QThread(多线程操作)实现吗?还是其他什么办法?具体一些。谢谢答复! --------------------编程问答-------------------- 利用QProcess信号实现:
QProcess *p = new QProcss;
connect(p,SIGNAL(finished(int)),this,SLOT(slotFinished(int)));
//或者 connect(p,SIGNAL(stateChanged(QProcess::ProcessState)),this,SLOT(slotStateChanged(QProcess::ProcessState)));
p->start("...\xxx.exe");//使用p->startDetached()无效 --------------------编程问答--------------------
引用 7 楼 zfmss 的回复:
利用QProcess信号实现:
QProcess *p = new QProcss;
connect(p,SIGNAL(finished(int)),this,SLOT(slotFinished(int)));
//或者 connect(p,SIGNAL(stateChanged(QProcess::ProcessState)),this,SLOT(slotStateChanged(QProcess::ProcessState)));
p->start("...\xxx.exe");//使用p->startDetached()无效

或许楼上的可以,我没试过监听另外一个程序的各种状态,我只做过启动一个程序,记得以前做过使用MS下的安装驱动的一个第三方exe,那时候好像要监听它的结束 --------------------编程问答--------------------
引用 7 楼 zfmss 的回复:
利用QProcess信号实现:
QProcess *p = new QProcss;
connect(p,SIGNAL(finished(int)),this,SLOT(slotFinished(int)));
//或者 connect(p,SIGNAL(stateChanged(QProcess::ProcessState)),this,SLOT(slotStateChanged(QProcess::ProcessState)));
p->start("...\xxx.exe");//使用p->startDetached()无效
我试了一下,程序采用Process::start()启动后,在界面右上角关闭按钮关闭程序,ProcessState还是不会自动变为NotRunning状态,所以无法监控到关闭啊?
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,