2013-11-09 152 views
1

我得到了奇怪的問題。 QProcess只是不工作!QProcess未知錯誤

錯誤未知。

我得到了全局變量在頭

QProcess *importModule; 

的我得到這個功能(我都嘗試startstartDetached方法BTW)

void App::openImport(){ 
     importModule = new QProcess(); 
     importModule->setWorkingDirectory(":\\Resources"); 
     importModule->startDetached("importdb_module.exe"); 
     QMessageBox::information(0,"",importModule->errorString()); 
} 

它僅僅指剛產出的是error is unknown。它也不會啓動其他exes像

void App::openImport(){ 
     importModule = new QProcess(); 
     importModule->setWorkingDirectory("C:\\Program Files\\TortoiseHg"); 
     importModule->startDetached("hg.exe"); 
     QMessageBox::information(0,"",importModule->errorString()); 
} 

我做錯了什麼? 還有其他的方式來從我的程序運行一些.exe? 或者也許.bat文件(它運行exes)? (用QProcess也試過,不工作)

回答

3

startDetached()是一種靜態方法,根本不在importModule上運行。 它啓動一個過程,然後停止關心。因此,importModule中的error()/ errorState()與startDetached()調用無關。你想要的是start()。 但是,由於QProcess是異步的,在start()返回後沒有任何事情會發生。您必須連接到started()error()finished()信號以瞭解結果。

connect(importModule, SIGNAL(started()), this, SLOT(importModuleStarted())); 
connect(importModule, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(importModuleFinished(int, QProcess::ExitStatus))); 
CONNECT(importModule, SIGNAL(error(QProcess::ProcessError)), this, SLOT(importModuleError(QProcess::ProcessError))); 
importModule->start(QStringLiteral("importdb_module"), QStringList()); 

或者您可以使用阻塞等待功能:

importModule->start(QStringLiteral("importdb_module"), QStringList()); 
importModule->waitForStarted(); // waits until starting is completed 
importModule->waitForFinished(); // waits until the process is finished 

不過,我強烈建議不要在主線程中使用它們,因爲它們阻止用戶界面即可。

+0

哦,但是pathes呢?我的意思是在這種情況下如何設置它們? – DanilGholtsman

+0

啊,忘了傳遞可執行文件名稱。固定。 –

+0

哦,謝謝,但我也意味着完整路徑.exe 或它假設是這樣'QStringLiteral(「somepath/importdb_module」)'? – DanilGholtsman