1. 程式人生 > >總結Qt5呼叫windows本地程式的三個方法以及異同

總結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()函式,此函式有三個過載函式,

boolQProcess::startDetached(constQString&program,constQStringList&arguments,constQString&workingDirectory=QString(),qint64*pid=Q_NULLPTR);
boolQProcess::startDetached(constQString&program,constQStringList&arguments);
boolQProcess::startDetached(const
QString&command);
我試著呼叫畫圖程式並開啟一張圖片:
QStringcmd="";
cmd+="C:/Users/WSG/Pictures/選單欄/PViewer.png";
QProcess::startDetached("mspaint"+QDir::toNativeSeparators(cmd));//QDir::toNativeSeparators將檔案路勁轉換成當前系統的標準路徑

OK,成功了!但是畫圖程式不會隨著主程式的退出而退出。

需要注意的是,圖片路徑如果包含空格,開啟失敗,如下圖:

接下來看如下程式碼:

QStringfile="D:/workspace/Engineering
Training/images/ui/UI2.png";
QStringListcmd;
cmd<<QDir::toNativeSeparators(file);
QProcess::startDetached("mspaint",cmd);

OK,現在即使路徑有空格,也能打開了,但是也不會隨主程式的退出而退出!

3、QProcess::start()函式

此函式呼叫方法及現象基本同2,這裡不細講,只注意一點,此函式呼叫的外部程式會隨著主程式的退出而退出。

三、總結及建議

1)基本不推薦system()函式,彈出個命令提示符視窗不好吧!

2)若要外部程式同主程式的退出而退出,使用start()函式,並且使用

QProcess::start(constQString&program,constQStringList&arguments,OpenModemode);
相比較
boolQProcess::start(constQString&command,OpenModemode);
檔案路徑中可以包含空格

3)若要外部程式不隨主程式的退出而退出,使用startDetached()函式,同時採用QStringList傳參,如若不開啟檔案,只打開程式,直接啟動程式就行,不用第二個引數。