2013-11-09 2 views
1

이상한 문제가 있습니다. QProcess가 작동하지 않습니다!QProcess 알 수없는 오류

오류를 알 수 없습니다.

I는 I (나는 도중에 모두 startstartDetached 방법을 시도)

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

그것은 그 error is unknown 출력 jsut이 기능을 가지고 헤더

QProcess *importModule; 

글로벌 VAR을 얻었다. 또한 다른 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()); 

은 또한 당신은 차단 대기 기능을 사용할 수 있습니다 : 그들은 다음 UI를 블록으로

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