Qt使用,Qprocess启动外部程序

前言

在本篇文章里面主要讲述利用Qt的Qprocess调用外部程序的注意事项,在此不讲述Qt的配置方法,同时因为网上已经有很多课参考的资料,在此主要强调一些需要注意的细节。

术语约定:

  1. 主程序:将要调用第三方程序的程序,调用代码在该程序里面;
  2. 外部程序:被主程序启动的程序,为.exe格式,

1 相关参考博客及资料

参考资料一

参考资料二

Qt官网资料

2 需要注意的事项

(1)启动外部程序

Qprocess类提供了三个接口函数用于启动外部程序,分别是:

QProcess::Start(***)
void	start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = ReadWrite)
void	start(const QString &command, QIODevice::OpenMode mode = ReadWrite)
void	start(QIODevice::OpenMode mode = ReadWrite)

Qprocess::StartDetached(***);
bool	startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory = QString(), qint64 *pid = nullptr)
bool	startDetached(const QString &command)

Qprocess::Execute(***);
int	execute(const QString &program, const QStringList &arguments)
int	execute(const QString &command)

利用Process::Start()调用外部程序时,若使用bool waitForFinished(int msecs = 30000)等待该进程结束,则需要注意时间参数的设置,若程序执行时间较长,需要设置为-1,否则会出现程序启动失败的现象。

各个启动接口的比较:

  • start()函数方便进行多个程序的并行,但是外部程序的输出需要自己读写并输出的主窗口。
  • execute()函数智能串行运行外部程序,优势在于自动打印外部程序控制台输出到主程序窗口。

(2)并行启动多个外部程序

或者是多次启动同一个程序,可以采用start()或者startDetaached()函数启动。不能使用execute()并行启动多个程序,execute()采用串行的方式执行,只有执行完被启动的程序以后才会执行后续代码。

方法:首先利用start()接口依次启动多个外部程序的进程,启动完成之后再调用等待结束函数,伪代码如下:

QProcess1.start(test1.exe);

QProcess2.start(test1.exe);

process1.WaitForFinished();
process2.WaitForFinished();

(3)打印外部程序控制台输出主程序窗口

若使用execute()启动外部程序,则会自动打印信息到主程序控制台窗口;

若使用start()启动外部程序,则需要人为读写外部程序控制台输出,输出方法见:待补充。

(4)工作目录的设置

这个主要影响到程序里面的相对路径,若程序使用相对路径读取程序下层文件夹里面的文件时,需要留意。

  • 使用start可以设置外部程序的工作目录;
  • 使用execute设置无效,只能继承主程序的工作目录,这就会导致一个问题,如果外部程序使用了相对路径访问自己程序所在文件夹的下层文件,将无法找到文件!

猜你喜欢

转载自blog.csdn.net/u010260855/article/details/83241373
今日推荐