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

tianwaifei86 2013-11-04 12:48:10
请教大牛,我使用QProcess启动一个程序后,再通过该程序界面的关闭按钮关闭该程序,我如何在qt中监控到该程序已关闭?
...全文
1250 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianwaifei86 2013-11-12
  • 打赏
  • 举报
回复
引用 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状态,所以无法监控到关闭啊?
寒山-居士 2013-11-07
  • 打赏
  • 举报
回复
引用 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,那时候好像要监听它的结束
tianwaifei86 2013-11-06
  • 打赏
  • 举报
回复
引用 5 楼 Esonpo 的回复:
你启动的那个exe,已经被受主程序控制了,他也没法告诉你它什么时候关闭,除非如楼上所说,使用进程间的通讯来解决此问题
麻烦请教一下,您说的进程间通信是指采用QThread(多线程操作)实现吗?还是其他什么办法?具体一些。谢谢答复!
寒山-居士 2013-11-06
  • 打赏
  • 举报
回复
你启动的那个exe,已经被受主程序控制了,他也没法告诉你它什么时候关闭,除非如楼上所说,使用进程间的通讯来解决此问题
zfmss 2013-11-06
  • 打赏
  • 举报
回复
利用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()无效
tianwaifei86 2013-11-05
  • 打赏
  • 举报
回复
请问yanbin_1985525和LazyDreamHunter: QProcess的start()启动进程后,其成员函数state()变为Running状态,再通过kill()关闭进程,state()变为NotRunning状态,这都测试正确。。。可是我在启动程序界面的右上角,点击"X"关闭按钮关闭启动的进程时,state()仍然为Running状态,没有变为NotRunning状态,此时我就监控不到该进程已关闭,什么原因? 这个问题怎么去解决? 谢谢!
tianwaifei86 2013-11-05
  • 打赏
  • 举报
回复
请问yanbin_1985525和LazyDreamHunter: QProcess的state()启动进程后,其成员函数state()变为Running状态,再通过kill()关闭进程,state()变为NotRunning状态,这都测试正确。。。可是我在启动程序界面的右上角,点击"X"关闭按钮关闭启动的进程时,state()仍然为Running状态,没有变为NotRunning状态,此时我就监控不到该进程已关闭,什么原因? 这个问题怎么去解决? 谢谢!
RabinSong 2013-11-04
  • 打赏
  • 举报
回复
可以使用进程间的通信机制,也就是说进程关闭时,向其父进程发送1个通知消息,这样就可以不用定时器,时刻检查了
醉过方知酒烈 2013-11-04
  • 打赏
  • 举报
回复
process有自己的状态,QProcess::Running,QProcess::NotRunning。 需要用的时候判断一下状态process的state就行了。如果需要一直检查,那就需要用定时器了。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧