Qt技巧:QProcess與外部程式的調用

來源:互聯網
上載者:User
 項目做到一定階段,經常需要在原來的工程上調用外部程式。Qt為此提供了QProcess類,QProces s可用於完成啟動外部程式,並與之互動通訊。

一、啟動外部程式的兩種方式:
(1)一體式: void  QProcess:: start( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite )
        外部程式啟動後,將隨主程式的退出而退出。
(2)分離式: void  QProcess:: startDetached( const QString & program, const QStringList & arguments, const QString & workingDirectory = QString(), qint64 * pid = 0 )
        外部程式啟動後,當主程式退出時並不退出,而是繼續運行。

    值得注意的是,當程式路徑中含有空格的時候,僅設定程式路徑program是無法被識別的,解決方案是再將程式路徑傳遞給 arguments。
例如:


//1-不帶空格,可以啟動 process->start("F:/AppInst/115/115com/115com.exe");

//2-帶空格,無法啟動 process->start("C:/Program Files/HaoZip/HaoZip.exe");

//3-帶空格,使用帶參模式,可以啟動 process->start("C:/Program Files/HaoZip/HaoZip.exe", QStringList("C:/Program Files/HaoZip/HaoZip.exe"));
二、 啟動之前需要做的工作:
    To start a process, pass the name and command line arguments of the program you want to run as arguments to start(). Arguments are supplied as individual strings in a QStringList.
    啟動一個外部程式,需要傳遞外部程式的路徑和執行參數,參數用QStringList來帶入。
(1)設定路徑:           void  QProcess:: setProgram( const QString & program )
(2)設定參數[可選]:  void  QProcess::  setArguments( const QStringList & arguments )
(3)啟動:                 void QProcess::start(OpenMode mode = ReadWrite)

Qt官方內建的例子:
QObject *parent;
...
QString program = "./path/to/Qt/examples/widgets/analogclock";
QStringList arguments;
arguments << "-style" << "fusion";

QProcess *myProcess = new QProcess(parent);
myProcess->start(program, arguments);     其實,start()或startDetached()已經整合了上面的三個步驟,如果需要分別設定,請採用以上的方式。

三、啟動狀態
    外部程式未啟動時,其狀態是 NotRunning ;
    當啟動時,其狀態轉變為 Starting ,正在啟動,但此時還未調用起來;
    啟動之後,繼續變為 Running ,同時發射出started()訊號,此時,可以對QProcess進行讀寫操作了;
    當退出時,其狀態改為 NotRunning ,並發射出finished()訊號。finishe()訊號會攜帶退出碼和退出狀態,可以分別通過exitCode()和exitStatus()來獲得。
    當發生錯誤時,QProcess會發出一個error()訊號,同樣的,也可以通過error()來獲得其錯誤類型,通過state()獲得當前程式的狀態。

四、QProcess 與 QIODevice
    QProcess繼承於QIODevice,因此,我們可以把它當作是一個I/O裝置進行讀寫操作。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.