您的位置:首页 > 编程语言 > Qt开发

总结Qt5调用windows本地程序的三个方法以及异同

2017-12-19 23:33 645 查看

一、说明:

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传参,如若不打开文件,只打开程序,直接启动程序就行,不用第二个参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐