한국어
Qt
 

C++ Class main함수 명령줄 옵션 해석

makersweb 2020.09.01 22:52 조회 수 : 2247

C/C++로 작성된 응용프로그램의 main함수는 두개의 인수(관습적으로 argc와 argv)를 전달받을 수 있다. 프로그래머는 응용프로그램에 명령줄옵셔들을 전달하여 프로그램을 상황에 따라 제어하는데 많이 사용된다. (사실 main함수에는 세번째 인수로 환경변수를 전달 받을 수 있다.)

 
Qt응용프로그램도 C++ 응용프로그램이므로 main함수에 옵션을 전달 할 수 있다. 이 글에서는 Qt응용프로그램에서 옵션을 해석할 때 편리하게 사용할 수 있는 클래스를 소개하고 간단하게 사용하는 방법을 설명한다.
 
명령줄 옵션은 보통 짧은 이름 옵션과 긴 이름 옵션으로 분류하는데 짧은 이름 옵션은 -(하이픈)과 영문자, 숫자 또는 기호의 단일 문자로 나타내는 옵션 형식이고 긴 이름 옵션은 --(하이픈 두개)에 영단어로 표현하는 형식이다. 
 
 
QCoreApplication 객체에 인수 전달
 
Qt 기반의 응용프로그램의 main함수는 대부분 QCoreApplication 객체를 생성하고 이때 main함수의 인수를 전달한다. 다음은 기본적인 Qt 응용프로그램 main함수를 보여준다.
#include <QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    // QApplication 객체를 생성할 때 argc와 argv를 전달한다.
    QApplication app(argc, argv);

    // MainWindow를 생성한다.
    MainWindow w;
    w.resize(1280, 720);
    w.show();

    return app.exec();
}

 

이 후 QApplication 객체를 통해 인수를 얻을 수 있다. 

QStringList args = app.arguments();

 

 

QCommandLineParser 클래스로 옵션 해석
 
QCommandLineParser 클래스는 편리하게 명령 줄 옵션을 처리하는 방법을 제공한다. 옵션 집합을 정의하고, 명령 줄 인수를 구문 분석하고, 실제로 사용 된 옵션과 옵션 값을 저장하는 기능을 제공한다.
 
이 클래스를 사용하려면 다음과 같이 헤더파일을 포함해줘야 한다.
#include <QCommandLineParser>
 
다음은 QCommandLineParser 클래스를 사용하는 기본적인 예제 소스 코드이다.
int main(int argc, char *argv[])
{
    // QApplication 객체를 생성할 때 argc와 argv를 전달한다.
    QApplication app(argc, argv);

    MainWindow w;
    w.resize(1280, 720);

    QCommandLineParser parser;

    // -h (help)옵션을 추가해준다.
    parser.addHelpOption();

    // 짧은 이름(-s)을 가진 bool 옵션 추가.
    QCommandLineOption showWindowOption("s", QCoreApplication::translate("main", "Show Window"));
    parser.addOption(showWindowOption);

    // 여러 이름을(-f, --force)가진 bool 옵션 추가.
    QCommandLineOption forceOption(QStringList() << "f" << "force",
            QCoreApplication::translate("main", "Overwrite existing files."));
    parser.addOption(forceOption);

    // 실제 명령 줄 인수 처리
    parser.process(app);

    bool show = parser.isSet(showWindowOption);

    if(show){
        /* 옵션(-s)이 포함되면 윈도우를 보여준다. */
        w.show();
    }

    return app.exec();
}

 

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 86182
79 C++로 구현된 모델을 QML의 ListView에서 참조 file makersweb 2019.09.07 4941
78 QSocketNotifier로 파일 디스크립터의 활동감지 makersweb 2019.08.28 1736
77 MCU용 Qt에 대해서 makersweb 2019.08.22 1923
76 [Qt News] Qt for Python을 위한 기술 비전 j2doll 2019.08.20 1626
75 열거형(enum)을 QML에서 사용하는 방법과 문자열(QString)로 얻기 makersweb 2019.08.20 3900
74 [Qt News] Qt 6 기술 비전 (Technical vision for Qt 6) [2] j2doll 2019.08.08 2123
73 [Qt News] Qt6 Git 개발 초기 단계 시작하기 j2doll 2019.08.02 2337
72 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 978
71 Qt기반의 오픈소스 프로젝트들 - 2 운영자 2019.07.21 4023
70 QML, 이미지, 폰트등을 바이너리 리소스로 만들기 makersweb 2019.06.24 3525
69 Qt Creator에서 임베디드 장치로 deploy설정(Custom Process Step) file makersweb 2019.06.15 2206
68 Qt Quick Controls 2사용 및 스타일 설정 file makersweb 2019.06.07 6282
67 QML 강좌 - 동적 Listing (ListView) file makersweb 2019.06.01 10123
66 QtInstallerFramework로 온라인 설치프로그램(Online Installer)만드는 방법 [4] file makersweb 2019.05.28 6275
65 QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] file makersweb 2019.05.26 14980
64 QML에서 멀티 스레드(multithreading) 프로그래밍 file makersweb 2019.05.25 2673
63 QtSerialPort를 사용한 시리얼(Serial)통신 [3] makersweb 2019.05.21 11976
62 Qt기반의 오픈소스 프로젝트들 makersweb 2019.05.15 5462
61 Q_D매크로와 d-pointer file makersweb 2019.05.07 762
60 가상키보드(Qt Virtual Keyboard)를 사용하는 방법 [32] file makersweb 2019.05.03 221892