qprocess qt 打开word_在Qt中,如何用QProcess快速实现外部程序调用

本文介绍了在Qt中使用QProcess类启动外部程序的方法,包括execute()、start()和startDetached()函数的用法。通过示例展示了如何执行关机命令、运行route和ipconfig等,并利用管道功能实现命令串联。了解这些方法有助于在Qt项目中灵活调用外部程序。
摘要由CSDN通过智能技术生成

总第14篇

本文主要详细总结了在Qt项目开发过程中,如何借助QProcess类快速实现外部程序调用,并在此基础上说明了相关接口的用法。通过阅读本文你将掌握程序进程间调用的方法,以便在以后的开发过程中可以参考。

1.QProcess类及接口介绍

QProcess类是Qt中专门用于启动一个外部程序进程并与主程序通信的。此类中包含多个静态函数和信号,可以方便地通过信号与槽机制实现信息互通。

我们要实现快速调用外部程序,常用的有三个接口函数:QProcess::execute(): 此函数是以阻塞的方式打开外部程序,只有外部程序执行完成后,主程序才会继续执行。外部程序的标准输出、标准错误都是重定向到主程序的标准输出和标准错误的。

QProcess::start(): 此函数是以子进程的 方式打开外部程序的,外部进程与主程序互不干扰,但外部进程的父进程就是主程序。

QProcess::startDetached(): 此函数是以分离的方式打开外部程序的,外部程序与主程序互不干扰,外部进程的父进程是系统的init进程。

上面三个接口函数中,execute()和startDetached()为静态成员函数,start()函数为普通成员函数。 另外,值得注意的是,使用start() 函数打开外部进程时,外部进程启动后,将随主程序的退出而退出,使用回调即可以正常接收信息;使用startDetached() 函数打开外部进程时,外部进程启动后,不会随主程序的退出而退出,使用回调无法正常接收到信息。

2. 打开外部程序的应用示例

对于日常工作中,想在某项工作执行完成后,执行关机操作。这就可以使用主程序调用操作系统中的Shutdown.exe进程。 这里先介绍一下Shutdown.exe相关的操作指令参数,在系统命令行中可以直接运行此进程并查看相关参数。

例如,我们要执行一小时后关机命令,可以写如下代码:

QStringList list;

list<< "-t" << "-s" << "3600";

QProcess::startDetached("Shutdown.exe",list);

// QProcess::execute("Shutdown.exe",list);

我们可以创建QProcess对象,使用start()函数,查看外部进程返回的数据,输出结果。其代码可以写成如下形式:

QProcess *pProces = new QProcess(this);

connect(pProces, SIGNAL(readyRead()),this, SLOT(on_read()));

QStringList list;

pProces->start("Shutdown.exe", list);

void on_read()

{

QProcess *pProces = (QProcess *)sender();

QString result = pProces->readAll();

QMessageBox::warning(NULL, "", result);

}

也可以单独执行程序,如route、ipconfig等。

QProcess p(0);

p.start("route");

p.waitForStarted();

p.waitForFinished();

qDebug()<<:fromlocal8bit>

QProcess p(0);

p.start("ipconfig");

p.waitForStarted();

p.waitForFinished();

qDebug()<<:fromlocal8bit>

也可以借助write()函数向外部进程中写入相应的参数,示例如下:

QProcess p(0);

p.start("cmd");

p.waitForStarted();

p.write("dir\n");

p.closeWriteChannel();

p.waitForFinished();

qDebug()<<:fromlocal8bit>

//或者是这一种形式QProcess p(0);

p.start("cmd", QStringList()<

p.waitForStarted();

p.waitForFinished();

qDebug()<<:fromlocal8bit>

我们也可以通过QProcess使用管道的功能,即一个进程的标准输出流到目标进程的标准输入流:command1 | command2。其代码如下示例:

QProcess process1;

QProcess process2;

process1.setStandardOutputProcess(&process2); //注意设置process1.start("command1");

process2.start("command2");

在项目开发过程中,要根据需求场景灵活选择适宜的接口函数,以达到满意的效果。

本文到此结束!

=======================================================

欢迎【关注作者、私信作者】。我们一起交流一起进步。

=======================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值