Qt中如何获取通过建立新线程启动的外部程序的执行结果

卢阳 2011-10-12 04:55:17
为了防止在启动外部程序执行相关命令时界面僵死,建立了新线程,在新线程里启动外部程序,通过操作界面按钮不断的向外部程序发送命令,同时将外部程序执行相关命令的结果返还回来在TEXTEDIT控件里打印出来。在无命令可执行的时候外部程序处于等待状态知道主程序(界面)发来quit信号才退出。
问题1:通过开线程的方式启动外部程序,外部程序如何获取主程序(界面)发送来的命令;
问题2:在线程里执行的外部程序如何将执行相关命令后的结果返回给主程序。

我的思考:通过重新实现run()函数来启动外部程序,同时建立connect连接,将主程序的信号与外部程序连接起来从而实现问题一的解决;问题二,通过类似的方式在run()函数中建立connect,不断监测外部程序时否有数据输出,若有则启动函数读取数据,并将读取到的数据emit到主程序(界面).
可是这两种看起来合理的思路似乎都无法正确的解决这两个问题。下面是我测试第二个问题的时候run()函数的实现截图。其中,LaunchSimsparc是启动外部程序的函数,connect()的期待作用是将外部程序的输出信号与读数据函数连接在一起,如果有数据可读则调用函数进行读取,并将读取到的数据发送到主程序。



欢迎大家积极的参加到讨论当中。分数不多,大家共享了。
...全文
290 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
GoatYangYang 2011-10-15
  • 打赏
  • 举报
回复
正在学习Qt中,这个问题我也会遇到,现在帮不上忙,帮顶先
GoatYangYang 2011-10-15
  • 打赏
  • 举报
回复
正在学习Qt中,这个问题我也会遇到,现在帮不上忙,帮顶先
GoatYangYang 2011-10-15
  • 打赏
  • 举报
回复
很好的帖子,正在学习Qt中,这两个问题我也可能会遇到,帮不上忙,帮顶先
卢阳 2011-10-14
  • 打赏
  • 举报
回复
第一个问题已经解决,第二个呢?connect应该在何处声明呢?才可以实时的检测外部程序是否有数据输出
卢阳 2011-10-12
  • 打赏
  • 举报
回复
怎么也没有人来关注一下呢?看来我得自己解决了
卢阳 2011-10-12
  • 打赏
  • 举报
回复
问题补充,connect()函数的第五个参数是Qt::BlockingQueuedConnect;感觉这个参数不是问题关键所在,问题应该是connect的位置。因为第五个参数所有类型我都试过。

16,215

社区成员

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

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