• 7422阅读
  • 9回复

[提问]Qt与外部程序通信问题 [复制链接]

上一主题 下一主题
离线losophy
 

只看楼主 倒序阅读 楼主  发表于: 2012-04-06
我现在有一个用C写的外部程序,该程序一运行就不停地printf数据。
我想把这个程序输出的数据重定向到qtextedit上。
我用到了qprocess::start。
现在的问题是我用QDebug看readall的信息,当外部程序正常运行时,没有读到数据。当外部程序出错时读到数据(这程序出错后就close了,正常是会阻塞的)。
我抄个程序读这个C外部程序,附件是我抄的程序。
qprocess.rar (287 K) 下载次数:5
离线losophy

只看该作者 1楼 发表于: 2012-04-06
说了这么多都没人回吗?
- -!
离线roywillow

只看该作者 2楼 发表于: 2012-04-06
没有看你的源码,但是感觉好像应该用readyReadStandardError ()和readyReadStandardOutput ()之类的信号来关联槽
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线losophy

只看该作者 3楼 发表于: 2012-04-07
回 2楼(roywillow) 的帖子
我用了readyRead(),是这两都的混合吧,但是还是读不出东西。我在想是不是我的C程序问题。因为输了错误也是用prinf_string的。
在线uidab

只看该作者 4楼 发表于: 2012-04-07
回 3楼(losophy) 的帖子
可能不是你的问题,而是Qt这里的问题,我也遇到过读取输出只能从readyReadStandardError ()获取, 可是实际上我调用的输出是正常输出。
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线losophy

只看该作者 5楼 发表于: 2012-04-07
问题出在这句里connect(cmd,SIGNAL(readyRead()), this, SLOT(readOutput()));
没有收到信号,现在要看这个C程序了。
离线losophy

只看该作者 6楼 发表于: 2012-04-07
最新情况:把这个C程序从原来的Makefile抽出来编译,能正常的标准输出。但是用原本的Makefile不会有任何输出,我同学说是链接问题。但是就是个简单的C程序。真的越来越搞不明白了。
同样一个程序,都是用gcc编译,怎样放在不同的位置就输出不同呢?
#include <stdio.h>
int main()
{
        char string[]="bbbbbbbbbb";
        while(1)
        {
        printf("aaaaaaaaa\n");
        puts(string);
        }
return 0;
}
离线roywillow

只看该作者 7楼 发表于: 2012-04-07
印象中我也遇到过一个Qt写的GUI程序在出现界面前就向控制台输出一些东西
最初使用了一个自己编译的一个版本,在命令提示符中可以正常看到输出
后来我又用了另外一个自己编译的版本,结果就看不到任何输出了
不知道是动态链接和静态连接的问题(最初我用的动态连接Qt库),还是不同编译器的问题(两次编译用的编译器不同)
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线losophy

只看该作者 8楼 发表于: 2012-04-07
回 7楼(roywillow) 的帖子
后来我看了一下,这个C程序是执行的是个脚本,没有生成bin文件。文件树结构如下。我现在是在研究upnp例子。我在想,是不是不一定要生成bin文件?
common
|   |-- sample_util.c
|   |-- sample_util.h
|   |-- upnp_tv_combo-sample_util.o
|   |-- upnp_tv_ctrlpt-sample_util.o
|   `-- upnp_tv_device-sample_util.o
|-- Makefile
|-- Makefile.am
|-- Makefile.in
|-- tvcombo
|   |-- linux
|   |   |-- upnp_tv_combo_main.c
|   |   `-- upnp_tv_combo-upnp_tv_combo_main.o
|   |-- upnp_tv_combo-upnp_tv_ctrlpt.o
|   |-- upnp_tv_combo-upnp_tv_device.o
|   |-- upnp_tv_ctrlpt.c
|   |-- upnp_tv_ctrlpt.h
|   |-- upnp_tv_device.c
|   `-- upnp_tv_device.h
|-- tvctrlpt
|   |-- linux
|   |   |-- upnp_tv_ctrlpt_main.c
|   |   `-- upnp_tv_ctrlpt-upnp_tv_ctrlpt_main.o
|   |-- upnp_tv_ctrlpt.c
|   |-- upnp_tv_ctrlpt.h
|   `-- upnp_tv_ctrlpt-upnp_tv_ctrlpt.o
|-- tvdevice
|   |-- linux
|   |   |-- upnp_tv_device_main.c
|   |   `-- upnp_tv_device-upnp_tv_device_main.o
|   |-- upnp_tv_device.c
|   |-- upnp_tv_device.h
|   `-- upnp_tv_device-upnp_tv_device.o
|-- upnp_tv_combo
|-- upnp_tv_ctrlpt
|-- upnp_tv_device
`-- web
    |-- tvcombodesc.xml
    |-- tvcontrolSCPD.xml
    |-- tvdevicedesc.xml
    |-- tvdevicepres.html
    `-- tvpictureSCPD.xml
离线losophy

只看该作者 9楼 发表于: 2012-04-09
好了,还是要重构。
快速回复
限100 字节
 
上一个 下一个