Qt開發 調起外部程式 程序

2021-08-27 07:42:55 字數 1314 閱讀 3087

在qt4中,qprocess作為qiodevice的繼承類,主要用來實現啟動外部應用程式,並且進行程序間通訊的。

調起外部程式,主要有兩種方式: start()和startdetached()。這兩種方式的區別是,start()後的程序與原有程序屬於父子程序關係,當父程序退出後,被調起的程序也會結束;而startdetached()會在程式調起完成後,將這兩個程序分離開來。

(1)start()方法可以這樣使用:

qprocess *pprocess = new qprocess(this);

pprocess->start(process_path);

不過這裡本人有個疑問, pprocess應該是什麼時候去delete的呢?如果不使用new來建立,而在棧上建立qprocess物件有什麼區別(如:qprocess process)?

(2)startdetached()的方法可以這樣使用():

qprocess::startdetached(process_path);
qprocess類還過載了這幾個方法,如

bool

startdetached( const qstring &program, const qstringlist &arguments, const qstring &workingdirectory, qint64 *pid= 0 )

bool

startdetached( const qstring &program, const qstringlist &arguments)

bool

startdetached( const qstring &program)

引數workingdirectory

指定了程式執行的工作目錄,當有資料輸出時,會根據此來獲得輸出的相對路徑及位置。

引數arguments

應該是在該程式被啟動後,用作資料傳遞吧;沒有實踐過這個引數,有待驗證。

而這幾個方法被設計為靜態方法,很想知道這樣設計的好處(免於建立物件外)和原理。

(3)對於qprocess的機制,大致可以理解為:在qt4版本之前,qprocess是利用socket的雙向通道機制實現了程序間的通訊;但由於qprocess實際上只是實現了單向通訊功能,浪費了socket的部分資源,在qt4改用無名管道的通訊機制(使用至少兩個單向通訊的管道來實現程序間通訊)。

對於qprocess的應用場合,和訊號/槽機制有點相對:訊號/槽機制用於內部物件間通訊;而qprocess則用於與外部物件通訊,或所謂程序間通訊。

Qt開發 開啟外部程式

qt開啟外部程式 1.通過呼叫系統函式 2.通過qprocess,阻塞呼叫 3.通過qprocess,非阻塞呼叫 qprocess pro new qprocess 2.qt在執行的時候,要啟動qws服務,如果用前面兩種方法,執行的時候,要新開啟乙個qws,否則不能執行 而用第三種方法,則不需要再開...

QT呼叫外部程式

qt呼叫外部程式 system calc.exe qprocess execute calc.exe qprocess startdetached calc.exe qprocess pro new qprocess pro start calc.exe 注釋 1 前兩種方法會阻塞程序,直到計算器程...

Qt中QProcess 開啟外部程序

qt中qprocess開啟外部程式,比較常用的一種方式就是直接呼叫start 函式,另一種是直接呼叫startdetached 函式,但是第二種方式啟動的外部程序,在啟動之後就和啟動外部程序的程式分離了,這樣就無法後續進行更多的控制,比如無法訪問啟動的外部程序的狀態,和無法在程式內部關閉外部程式,只...