Qt로 GUI 코딩을 하면서 외부 실행파일(*.exe)를 실행해야 하는 경우를 위해 어설프게 정리해 둔다.
참고로 다음의 내용은 QDialog 기준으로 작성 한다.
QProcess 생성 및 실행
*.h
헤더 파일에 #include <QProcess>
를 포함하고, 멤버 포인터 변수 QProcess *processEXE
를 만들어 준다.
// 이런저런 #include "..." // QProcess를 추가해 준다. #include <QProcess> class CLASSNAME : public QDialog { // class에 여러 선언이 있고 ... private: QProcess *processEXE; }
*.cpp
(1) 실행파일이 있는지 체크하고, (2) 실행파일의 시작위치 지정, (3) 아규먼트 설정(필요시), (4) 실행~~ 한다.
// 실행 파일의 경로를 설정 한다. QString _exePath = "C://windows//system32//notepad.exe"; // 실행 파일이 있는지 체크 한다. if (QFile::exists(_exePath)) { // 실행 파일이 정상적으로 존재 한다면 QProcess 생성 // 비교를 하는 이유는 다른 곳에서 생성했을 수도 있다. if (processEXE == NULL) { processEXE = new QProcess(this); } // 간혹 실행파일의 시작위치를 지정해 주지 않으면 오동작 하는 프로그램이 있다. std::string _workingPath = (_exePath.toStdString()).substr(0, (_exePath.toStdString()).find_last_of('/') - 1); processEXE->setWorkingDirectory(QString::fromStdString(_workingPath)); // 아규먼트가 필요하다면 이렇게 .. QStringList _arguments; _arguments << "1stArg" << "2ndArg"; // 실행한다. processEXE->start(_exePath, _arguments); // 아규먼트가 불필요 하다면 ... // processEXE->start(_exePath); }
QProcess 해제
다음은 대략 동작은 하는데 ... 정확하진 않다....
if (prcessEXE) { if (processEXE->state() == QProcess::Running) { processEXE->close(); } delete processEXE; processEXE = NULL; }