Qt调用外部程序,启动并从中获取信息——QProcess

今天在开发的时候遇到了程序间调用的问题,最开始的设想是使用c++来完成,后来想,既然使用Qt进行界面开发的,那能否用Qt来完成相关工作呢,于是展开了这一次旅行。

闲话少说,开始正文,先看一下大致的流程:

首先,我们通过Qt的那部分模块来实现此功能,牛曰:在`QProcess`模块当中
其次,我们应该通过怎样一个流程来完成呢,牛历后曰:两步走,首先要启动外部程序,启动之后外部程序会产生相应的动作,也就是说会产生相应的信号;最后,将接受到的信号连接到相应的处理函数上,完成相应的动作。
最后,我们来看实现
先看个简单版的,启动一个程序

 QProcess* caller = new QProcess(this);//创建对象,指定父类指针
 caller->start("notepaid.exe");//启动notepaid


    这是会弹出相应的界面,我的设置存在一些问题,启动上诉代码的时候,启动的是系统自带的记事本

再看一个稍微复杂一些的,启动一个指定程序,并想此程序传入命令参数,这个操作类似于在命令行中启动程序时带有一些参数,这里我自己制作了一个小的打印程序,就是将你给定的内容打印出来(内容不许有空格)

QProcess* caller = new QProcess(this);//创建对象,指定父类指针
caller->start("D:/exetest.exe",QStringList()<<"HelloWorld");//启动程序并传入参数


    由于制作的软件是无界面的,所以运行上述代码的时候,我是看不到任何东西的

最后看个再复杂一点的,在前一步的基础上,获取调用软件的输出(就是打印给定内容),并在当前软件中显示出来

void ExeTest::OnBtnTest()
    {
      QProcess* caller = new QProcess(this);//创建对象,指定父类指针
      caller->start("D:/exetest.exe",QStringList()<<"HelloWorld");//启动程序并传入参数
      connect(this->caller, SIGNAL(finished(int)),this,SLOT(Result(int)));//连接信号
    }
void ExeTest::Result(int a)
    {
        if (0 == a)
        {
            QByteArray res = caller->readAllStandardOutput(); //获取标准输出
            ui.Txt->appendPlainText(QString::fromLocal8Bit(res)); //打印出来
        }
        caller->close();
    }
    运行上述代码的时候你就可以看到在Qt界面中显示出了“HelleWorld”

是不是想问什么是标准输出?曰:类似于print,cout这种的输出,需要注意的是,输出和返回时不一样的!

是不是想问程序如何接受外部命令?曰:记得main函数声明是带有的两个参数吗,就是int main(int argc, char *argv[]),argc是参数数量,argv存放了具体的命令语句,我这里说的还不是很清楚,可以再去查一下

注意:我这里只是简单的使用,QProcess类中还有很多方法我没有用到,在进一步使用前建议把Qt官方文档中有关QProcess的介绍看一下,重点是看一下他有哪些接口
 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值