QProcess调用外部程序-以截图软件Snipaste为例

QProcess调用外部程序两种方式的比较,以及路径空格问题的处理

参见项目示例
github
gitee

有时需要调用外部程序,可通过QProcess实现该功能,代码如下:

1
2
3
4
5
6

//代码0
QProcess::startDetached("Snipaste/Snipaste.exe") //启动Snipaste
QProcess::startDetached("Snipaste/Snipaste.exe" + " snip") //执行截图命令
//QProcess::startDetached("\"Snip aste/Snipaste.exe\"" + " snip") //路径中可以有空格

注意:路径中不可有空格,详见下文。

QProcess中的start()startDetached()区别

  1. void QProcess::start() 启动后, 外部程序将随主程序的退出而退出。
  2. void QProcess:: startDetached() 启动后,当主程序退出时外部程序并不退出,而是继续运行。

外部程序路径中不能带空格

原因:QProcess会将路径当作命令,以空格进行分割。

方法1-调用其他重载:

1
2
3
void start(const QString &program, 
const QStringList &arguments,
QIODevice::OpenMode mode)
1
2
QProcess process;
process.start("\"C:/Users/Tmp/Test Demo.exe\"");

方法2 - 调用以下重载并将路径配合转义\字符:

1
void start(const QString &command, QIODevice::OpenMode mode)

示例见代码0 注释部分。

参考