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