Qt使用,Qprocess啟動外部程式

2021-08-29 13:52:06 字數 1935 閱讀 9262

主程式:將要呼叫第三方程式的程式,呼叫**在該程式裡面;

外部程式:被主程式啟動的程式,為.exe格式,

參考資料一

參考資料二

qt官網資料

啟動外部程式並獲取外部程式輸出

qt學習之路(58): 程序間互動

qprocess總結

qprocess類提供了三個介面函式用於啟動外部程式,分別是:

qprocess::start(***)

void start(const qstring &program, const qstringlist &arguments, qiodevice::openmode mode = readwrite)

void start(const qstring &command, qiodevice::openmode mode = readwrite)

void start(qiodevice::openmode mode = readwrite)

qprocess::startdetached(***);

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

bool startdetached(const qstring &command)

qprocess::execute(***);

int execute(const qstring &program, const qstringlist &arguments)

int execute(const qstring &command)

利用process::start()呼叫外部程式時,若使用bool waitforfinished(int msecs = 30000)等待該程序結束,則需要注意時間引數的設定,若程式執行時間較長,需要設定為-1,否則會出現程式啟動失敗的現象。

各個啟動介面的比較:

或者是多次啟動同乙個程式,可以採用start()或者startdetaached()函式啟動。不能使用execute()並行啟動多個程式,execute()採用序列的方式執行,只有執行完被啟動的程式以後才會執行後續**。

方法:首先利用start()介面依次啟動多個外部程式的程序,啟動完成之後再呼叫等待結束函式,偽**如下:

qprocess1.start(test1.exe);

qprocess2.start(test1.exe);

process1.waitforfinished();

process2.waitforfinished();

若使用execute()啟動外部程式,則會自動列印資訊到主程式控制臺視窗;

若使用start()啟動外部程式,則需要人為讀寫外部程式控制臺輸出,輸出方法見:

例如:子程式為a,主程式a

可以使用訊號槽的方式將兩個程式的輸入輸出聯絡起來,注意點:

//注意:下面是偽**,並不保證索引英語名詞都正確

a_main()

private slots://add slots

output()

}}

這個主要影響到程式裡面的相對路徑,若程式使用相對路徑讀取程式下層資料夾裡面的檔案時,需要更改。

使用訊號槽讀取外部程式中文輸出存在乙個問題,轉換為中文後外部程式輸出中換行符將無效。由於之間寫過的一篇文章,unix,windows,mac裡面的換行符不一樣,導致處理也不一樣,我現在要用qstring以行分割(讀取的文字檔案的裡面有換行符)。所以要通吃這三種換行符

用正規表示式qregex就可以了:

qstring.split(qregexp("[\r\n]"),qstring::skipemptyparts);

這樣返回的list就是以行分割的。

QT 在qt中使用QProcess類執行tar指令

qt提供了乙個qprocess類用於啟動外部程式並與之通訊。這個類是非同步工作的,而且在後台執行,這樣使用者介面就可以始終保持響應。qprocess start 與qprocess execute 都能完成啟動外部程式的任務,二者有什麼區別呢?區別在於start 是非阻塞的,而execute 是阻塞...

qt中的QProcess的使用總結

參考部落格 1 2 一 這邊注意區分兩個啟動的時候start和startdetached 1 start 的時候你的主程式結束的時候,呼叫的外部程式也會結束 2 startdetached 的時候你的主程式雖然被關閉,但是呼叫的外部程式並不會結束,也就是開啟之後兩者的關聯性會消失 二 判斷當前程式是...

QT中呼叫外部程式 QProcess的使用

本文 http blog.csdn.net waderchan archive 2009 05 19 4199913.aspx 執行介面如下 程式共包含以下有乙個檔案 view plain copy to clipboard print?main.cpp include process.h incl...