본문으로 바로가기

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