主程式:將要呼叫第三方程式的程式,呼叫**在該程式裡面;
外部程式:被主程式啟動的程式,為.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...