Qt提供了一个与平台无关的QProcess类,用以对进程的支持。本节讲述了怎样在Qt应用程序中启动一个外部程序进程,以及几种常用的进程间通信方法。
设计应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使用现成的程序很好地实现了,这时就可以在当前的应用程序中调用外部的程序来实现该功能,这就会使用到进程。Qt应用程序可以很容易地启动一个外部应用程序,而且Qt也提供了多种进程间通信的方法。
一、运行一个进程
Qt的QProcess类可以用来启动一个外部程序并与其进行通信。下面我们来看一下怎么在Qt代码中启动一个进程。
运行一个进程打开记事本
首先创建QtGui应用,工程名称为“myProcess”,其他选项保持默认即可。先进入mainwindow.h文件添加代码,添加私有对象定义:QProcess myProcess。然后在设计模式往界面上拖入一个Push Button部件,修改其显示文本为“启动一个进程”。在按钮上点击鼠标右键,转到其clicked()信号对应的槽,更改如下:
void MainWindow::on_pushButton_clicked()
{
myProcess.start("notepad.exe");
}
这里我们使用QProcess对象运行了Windows系统下的记事本程序(即notepad.exe程序),因为该程序在系统目录中,所以这里不需要指定其路径。大家也可以运行其他任何的程序,只需要指定其具体路径即可。我们看到,可以使用start()来启动一个程序,有时启动一个程序时需要指定启动参数,这种情况在命令行启动程序时是很常见的。
运行程序,单击界面上的按钮时就会弹出一个记事本程序。
QProcess也提供了一组函数,可以脱离事件循环来使用,它们会挂起调用的线程直到确定的信号被发射:
- waitForStarted()阻塞直到进程已经启动;
- waitForReadyRead()阻塞直到在当前读通道上有可读的数据;
- waitForBytesWritten()阻塞直到一个有效负载数据已经被写人到进程;
- waitForFinished()阻塞直到进程已经结束。
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
二、进程间通信方式
Qt提供了多种方法在Qt应用程序中