總結Qt5呼叫windows本地程式的三個方法以及異同
阿新 • • 發佈:2019-02-11
一、說明:
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/EngineeringTraining/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傳參,如若不開啟檔案,只打開程式,直接啟動程式就行,不用第二個引數。