2014-08-31 3 views
0

QEPcess를 사용하여 미리 빌드 된 C++ 바이너리를 실행할 수없는 곳이 있습니다. 동시에 사람들이 QProcess로 쉘 스크립트 등을 실행하는 다른 질문이있어서 혼란 스럽습니다. QProcess를 사용하여 미리 빌드 된 C++ 바이너리를 실행할 수 있습니까? 이 바이너리는 텍스트 파일을 읽고 두 개의 텍스트 파일을 생성합니다. GUI를 사용하여 기본 UI를 만들고 클릭하면 외부 바이너리를 호출하는 버튼이 있습니다. execute으로 이것을 실행하면 QIODevice: read: device not open의 오류가 발생합니다. start을 사용할 때 오류가보고되지 않습니다. 그러나 출력 파일도 생성되지 않습니다. qt에서 허용되는지 아니면 다른 접근 방식에서 허용되는지에 대한 아이디어가 필요합니다.QProcess가 C++ 파일을 실행 중임

void MainWindow::on_startButton_clicked() 
{ 
QString program = "./home/naveen/sdj"; 
QProcess *myProcess = new QProcess(this); 
myProcess->start(program); 
myProcess->waitForFinished(); 
qDebug() << myProcess->exitStatus(); 
qDebug() << myProcess->readAllStandardError(); 
}   

답변

4

첫째, QProcess이 :: 실행은() a static method입니다 -를 사용하는 QProcess 인스턴스를 생성 할 이유가 없습니다. QProcess :: start()를 사용하면 프로세스가 비동기 적으로 실행됩니다. 리턴 코드를 확인하기 전에 finished 신호를 청취해야합니다.

둘째, 이것이 의도 한 것입니까?

QString program = "./home/naveen/sdj"; 

* nix 파일 시스템에서 ./은 현재 디렉토리에서 시작한다는 의미입니다. 그래서 QProcess는 /home/naveen/sdj을 찾지 않을 것이며, 대신 /yourProjectBuildPath/home/naveen/sdj을 찾을 것입니다. 나는 그것이 당신이 원하는 것이 아니라고 생각합니다.

+0

물론 이것은 실행 경로가 아니라 빌드 경로입니다. – Smar

+0

@Smar 사실, QtCreator가 앱을 실행하는 가장 일반적인 경우를 가정합니다. – MrEricSir

+0

@MrEricSir, 나는 그것을/home/naveen/sdj로 바 꾸었습니다. 아직도 아무 실행도. 또한, 어떻게 '마침'을 기다릴 수 있습니까? 힌트를 주시겠습니까 –