• 7963阅读
  • 6回复

求教:如何用QT调外部程序,并将输出信息一行一行的显示出来?多谢! [复制链接]

上一主题 下一主题
离线shally5
 

只看楼主 倒序阅读 楼主  发表于: 2007-12-26
— 本帖被 XChinux 执行加亮操作(2007-12-27) —
求教:如何用QT调外部程序,并将输出信息一行一行的显示在listBox中?多谢!


原来我是用QProcess调外部程序?
我用如下代码后listBox中没有东西啊!
void MainForm::DoExe()
{
    QProcess* myProcess=new QProcess;
    myProcess->addArgument( "test" );
    myProcess->start();
    while(myProcess->isRunning())
    {
      listBox1->insertItem(myProcess->readLineStdout() );
    }
}

如下是test程序的代码
#include <stdio.h>
#include <stdlib.h>
void main()
{
  for(int i=0;i<10;i++)
  {
      printf("%d test.....\n",i);
      Sleep(500);
  }
  return 0;
}
离线XChinux

只看该作者 1楼 发表于: 2007-12-27
先setProcessChannelMode(QProcess::MergedChannels)
然后处理readyReadStandardError()和readyReadStandardOutput()这两个信号
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线shally5

只看该作者 2楼 发表于: 2007-12-27
多谢版主,
我用的是QT3.X.X,好象没有readyReadStandardError()和readyReadStandardOutput()
我想实现的功能就是按一下按钮就调用一个外部程序运行,并且将程序的输出信息截获显示
到程序的窗口上的listBox或其它Text组件中。
现在却总是实现不了,真是没办法,以前我是用KYLIX作的,现在KYLIX在Fedora6中没法使用了
改用QT,新手就是问题多啊!
求总版主多指点一下,谢谢啦!
离线shiroki

只看该作者 3楼 发表于: 2007-12-27
readyReadStdout
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线shally5

只看该作者 4楼 发表于: 2007-12-28
多谢总版主:
只好用readyReadStdout了,看样子不能一行一行的读信息了。

另外:发现一定要用Desinger中加好SLOT函数才行,手功在CPP中加的SLOT和槽函数编译正常,但是运行中没有反应,真怪啊!后来又改了moc_XXXXX.cpp还是不行。
离线landuochong

只看该作者 5楼 发表于: 2007-12-29
void MainForm::DoExe()
{
    QProcess* myProcess=new QProcess;
    myProcess->addArgument( "./test" );
    myProcess->start();
    while(myProcess->isRunning())
    {
      listBox1->insertItem(myProcess->readLineStdout() );
    }
}
需要把test文件拷到debug目录下,
main()函数中调用DoExe()即可
离线foxyz

只看该作者 6楼 发表于: 2007-12-30
window下不清楚,但是unix环境下moc_xxx.cpp是通过工具moc自动产生的,当你的头文件包含Q_OBJECT宏的时候,表示你定义了自己的signal或者slot,这时候就需要根据这个头文件使用moc产生出*.cpp文件。比如:你的头文件名称是mydialog.h
则需要如下的方法:moc -o moc_mydialog.cpp mydialog.h生成moc_mydialog.cpp并把这个文件加入project,当然如果你使用
*.pro和qmake来产生Makefile的话,上边过程是可以自动完成的。只要在*.pro里增加 qt += moc ,好像还有其他的我记不清楚了。我平时都很少使用qmake.我们老板(美国人)很喜欢自己搞定编译,总是一个脚本,编译完所有的开发目录下的东西。编译一次得40分钟以上。我受不了
快速回复
限100 字节
 
上一个 下一个