[問題] Qt QProcess用法

看板C_and_CPP (C/C++)作者 (東逼)時間14年前 (2011/12/28 01:41), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) QT 4.7.3 in linux ubuntu.windows 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 無 是這樣的 我想透過QT來呼叫外部系統的程式 (ex: 千千靜聽) 查了一下網路的文章 發現可以利用 QProcess來實現 我簡單寫了個程式來測試 發現在windows上是可以成功執行 但是相同的寫法在ubuntu上就不行 以下是我憑印象打的@@ //donby.h #ifndef DONBY_H #define DONBY_H #include <QDebug> #include <QProcess> class donby { public: donby(); void auto_open(); void auto_close(); private: QProcrss* process; QStringList command; }; #endif // in donby.c #include "donby.h" donby::donby() { qDebug("init class::donby"); process = new QProcess; command << ""; } void donby::auto_open() { qDebug("auto_open"); process->start("C:/Program Files/TTPlayer/TTPlayer.exe", command); ↑↑↑ 有問題的是這行 } void donby::auto_close() { qDebug("auto_close"); process->close(); } 以上程式碼是憑印象打的 @@ 主要是我想利用QT提供的QProcess來實現呼叫外部程式的方法 以上述例子來說,我可以透過QT去呼叫"千千靜聽" 我在window上也的確可以成功呼叫 但相同的方法拿到 linux執行就不行 當然為求簡單,在linux上我呼叫的程式為 command << "-l"; process->start("ls", command); compile時並沒有任何出錯,執行的時候也沒任何警告訊息 但是整個terminal就毫無反應 (預期應該會列出資料夾的內容) 現在若是我將有問題的那行 process->start("ls", command) 改成 process->execute("ls", command) 雖然這樣就會正確跑出資料來了 但我不懂得是這兩個方法有甚麼差別? 表面上看起來作的事情都一樣,丟的參數也都一樣 0.0 而且這又衍生一個問題,除非這個外部程式結束了 否則我不能再繼續往下做事情 即使我透過其他方式呼叫 auto_close()也無法停止 查了一下網路發現有人說 execute方法會阻塞直到此方法執行的程序結束 我看了還不是很了解他的意思 @@ 所以就來請教大家了 希望能獲得一些啟發 在此也先跟各位說聲謝謝囉 -- ▍ ▍ ╯╰ ╯╰ ◢◣ ◢◣ 我最愛的 柏柏龍~ 柏柏龍~ ◢██◣ ╮╭ ▎▎╮╭ ▎▎ 柏柏龍~ 柏柏龍~ ⊙ ⊙ ⊙ ⊙ 人人心中都有柏柏龍~ ≡ ▼ ≡ ▲▲ ● ● ≡ ▼ ≡ ■ ■ ■ ■ 憤怒就永遠不會消失~ ⊙⊙ ≡皿 ≡ 炸是最美的擁有~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.250.206.46

12/29 10:47, , 1F
read source code src/corelib/io/qprocess.cpp
12/29 10:47, 1F

12/29 10:48, , 2F
source of QProcess::execute explains your question
12/29 10:48, 2F
文章代碼(AID): #1E-WDR7e (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1E-WDR7e (C_and_CPP)