본문으로 바로가기

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;
}


초짜 프로그래밍QT카테고리의 다른글

[QT] 진수 변환  (0) 2018.03.16