[問題] Qt QProcess用法
開發平台(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
12/29 10:47, 1F
→
12/29 10:48, , 2F
12/29 10:48, 2F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章