한국어
Qt
 

QCoreApplication, QGuiApplication, QApplication 클래스

QCoreApplication 클래스는 UI가 없는 Qt 애플리케이션을 위한 기본 이벤트 루프와 애플리케이션의 설정, 실행 경로등의 정보들이 포함되어 있다. 프로세스내에서 오직 하나의 QCoreApplication 객체만 생성되어야한다. QCoreApplication 의 이벤트 루프에서는 내부 이벤트 및 운영 체제의 이벤트 (예 : 타이머 및 소켓 이벤트등) 를 처리하는데 exec() 호출로 시작된다. 이벤트 루프가 종료(quit()) 될 때까지 exec() 함수는 반환되지 않으며 일반적으로 exec()함수는 main()함수의 return 으로 호출한다.

 

만약 메인 스레드에서 오래걸리는 작업을 실행하면 이벤트를 처리할 수 없으므로 애플리케이션의 응답성을 잃을 수 있다. 따라서 오래걸리는 작업은 별도의 스레드에서 처리하거나 processEvents()를 호출하여 응용프로그램의 응답성을 유지해야 한다.

 

QGuiApplication 은 QCoreApplication 의 파생클래스로써 윈도우 시스템과 관련된 이벤트(입력장치 이벤트등) 처리가 포함되어 있다. 또한 폰트(QFont)를 설정하거나 QClipboard, QInputMethod, QWindowList 등을 제공한다. GUI가 없는 Qt 애플리케이션의 경우 Qt GUI 모듈에 의존하지 않으므로 QCoreApplication 을 대신 사용한다.

 

QApplication 은 QWidget 기반 애플리케이션에 필요한 기능을 갖춘 QGuiApplication 의 파생클래스이다. 위젯의 초기화, 마무리등 QWidget과 밀접하게 관련된 일을 수행하기 때문에 QWidget을 사용하는 응응프로그램에서 QApplication 을 생성하지 않으면 다음과 같은 메세지만 출력할 뿐 실행되지 않는다.

QWidget: Cannot create a QWidget without QApplication

 

QApplication 을 사용하려면 프로젝트파일(*.pro)에 다음줄을 추가한다.

QT += widgets

 

비 QWidget 기반 Qt 애플리케이션의 경우(예를 들면 Qt Quick 2)는 QtWidget 라이브러리에 의존하지 않으므로 QGuiApplication 을 사용하면된다.

 

다음 예제는 적절한 유형의 애플리케이션 객체를 동적으로 생성하는 방법을 보여준다. 이 애플리케이션을 -no-gui 옵션과 함께 실행하면 GUI가 없는 버전이 된다.

QCoreApplication* createApplication(int &argc, char *argv[])
{
    for (int i = 1; i < argc; ++i)
        if (!qstrcmp(argv[i], "-no-gui"))
            return new QCoreApplication(argc, argv);
    return new QApplication(argc, argv);
}

int main(int argc, char* argv[])
{
    QScopedPointer<QCoreApplication> app(createApplication(argc, argv));

    if (qobject_cast<QApplication *>(app.data())) {
       // start GUI version...
    } else {
       // start non-GUI version...
    }

    return app->exec();
}

 

qApp 및 qGuiApp 전역 포인터

생성된 애플리케이션 객체는 qApp 또는 qGuiApp 전역 포인터로 액세스 할 수 있다. 이 전역 포인터는 다음과 같이 정의된다.

 

QCoreApplication 을 생성한 경우

#define qApp QCoreApplication::instance()

 

QApplication 을 생성한 경우

#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))

 

QGuiApplication 을 생성한 경우

#define qApp (static_cast<QGuiApplication *>(QCoreApplication::instance()))

#define qGuiApp (static_cast<QGuiApplication *>(QCoreApplication::instance()))

 

또한 qApp 포인터와 동등한 포인터를 반환하는 instance() 함수를 통해서도 액세스 할 수 있다.

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 87716
» Qt애플리케이션 객체(QCoreApplication, QGuiApplication, QApplication) 에 대해서 makersweb 2019.11.11 10469
18 Ubuntu Linux에서 Qt Creator 설치 file makersweb 2016.03.06 10813
17 Qt 응용프로그램 배포(windows) file makersweb 2018.10.10 11703
16 Qt Installer Framework - 패키징, 설치프로그램 제작 file makersweb 2018.10.14 11893
15 Qml 기본 컴포넌트 강좌 (1) file makersweb 2019.01.03 12368
14 QtSerialPort를 사용한 시리얼(Serial)통신 [3] makersweb 2019.05.21 12382
13 Qt의 오픈소스 라이센스 소개 file makersweb 2019.12.15 12956
12 Windows에서 라즈베리파이3용 Qt5.10.0 크로스컴파일 [20] file makersweb 2018.02.23 13504
11 QML과 QtQuick 모듈 개념과 기본 타입들 makersweb 2019.04.26 13639
10 Qml과 C++로 구현하는 GUI어플리케이션 file makersweb 2018.12.25 14380
9 Qt 프로그래밍의 시작 makersweb 2015.10.25 14585
8 초보자를 위한 첫번째 프로젝트 - QML로 만드는 Hello World file makersweb 2018.03.16 14776
7 QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] file makersweb 2019.05.26 15326
6 QThread 소개 및 예제 makersweb 2019.12.25 20084
5 Qt의 시그널 슬롯 시스템 file makersweb 2015.10.20 24068
4 Windows에서 Qt 설치 따라하기 file makersweb 2019.10.14 31182
3 QString 문자열 다루기 예제 운영자 2019.01.26 41345
2 콘솔에서 사용자 입력받기 file makersweb 2020.03.22 51986
1 가상키보드(Qt Virtual Keyboard)를 사용하는 방법 [32] file makersweb 2019.05.03 224183