总结Qt5调用windows本地程序的三个方法以及异同
2017-12-19 23:33
645 查看
一、说明:
windows版本:win10Qt版本: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传参,如若不打开文件,只打开程序,直接启动程序就行,不用第二个参数。
相关文章推荐
- c++调用其它程序的方法,以及读取本地txt文件方法。
- Windows下获取Dump文件以及进程下各线程调用栈的方法总结(转)
- Windows下获取Dump文件以及进程下各线程调用栈的方法总结
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- Windows下获取Dump文件以及进程下各线程调用栈的方法总结
- flex air应用程序在windows环境下调用外部exe程序的一种方法
- java 外部调用c程序(后缀为.exe--是可以运行的程序--不是本地方法的实现)
- c# windows程序调用本地输入法
- windows命令行下随时随地调用csc编译器的方法(解决dos下编译.net程序找不到CSC的问题)
- Windows下gcc以及Qt的DLL文件调用之总结
- Android中外部程序调用方法总结
- Windows程序的调用方法
- java本地方法如何调用其他程序函数,方法详解
- 黑马程序员--Java基础加强--07.【反射创建对象 操作字段 调用方法的异同】【个人总结】
- paip.按键精灵调用其它程序及DLL以及EXE命令行的方法
- Windows下gcc以及Qt的DLL文件调用之总结
- 在程序中调用外部程序,用process返回命令执行结果以及抓取错误信息的方法
- 今日收获总结(关于存储过程时间查询的一些方法以及字段截取的函数及调用示例)
- windows下PHP调用执行桌面程序的方法
- php程序获取远程图片进行下载到本地方法的总结