总结Qt5调用windows本地程序的三个方法以及异同
一、说明:
windows版本:win10
Qt版本:Qt5.9.3
以调用windows自带的画图程序为例
二、调用方法及异同
1、system()函数
system("mspaint");
system("mspaint.exe");
system("C:/Windows/system32/mspaint");
system("C:/Windows/system32/mspaint.exe");
以上四种方法另选一种都能打开画图程序,但是windows的命令提示符窗口会出现,而且主程序窗口不能响应任何事件,强制关闭主程序画图程序会一起退出。
另外尝试了一下调用计算器程序,结果就是命令符提示窗口一闪而过,主程序窗口能操控,关闭主程序,计算器程序不会退出。
2、QProcess::startDetached()函数,此函数有三个重载函数,
bool QProcess::startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory = QString(), qint64 *pid = Q_NULLPTR);bool QProcess::startDetached(const QString &program, const QStringList &arguments);bool QProcess::startDetached(const QString &command);我试着调用画图程序并打开一张图片:QString cmd = " ";cmd += "C:/Users/WSG/Pictures/菜单栏/PViewer.png";QProcess::startDetached("mspaint" + QDir::toNativeSeparators(cmd)); // QDir::toNativeSeparators将文件路劲转换成当前系统的标准路径
OK,成功了!但是画图程序不会随着主程序的退出而退出。需要注意的是,图片路径如果包含空格,打开失败,如下图:
接下来看如下代码:
QString file = "D:/workspace/Engineering Training/images/ui/UI2.png";QStringList cmd;cmd << QDir::toNativeSeparators(file);QProcess::startDetached("mspaint", cmd);
OK,现在即使路径有空格,也能打开了,但是也不会随主程序的退出而退出!
3、QProcess::start()函数
此函数调用方法及现象基本同2,这里不细讲,只注意一点,此函数调用的外部程序会随着主程序的退出而退出。
三、总结及建议
1)基本不推荐system()函数,弹出个命令提示符窗口不好吧!
2)若要外部程序同主程序的退出而退出,使用start()函数,并且使用
QProcess::start(const QString &program, const QStringList &arguments, OpenMode mode);相比较bool QProcess::start(const QString &command, OpenMode mode);文件路径中可以包含空格3)若要外部程序不随主程序的退出而退出,使用startDetached()函数,同时采用QStringList传参,如若不打开文件,只打开程序,直接启动程序就行,不用第二个参数。