한국어
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 86173
19 QQuickImageProvider 를 이용한 Qml 에서 이미지 표시 makersweb 2015.10.18 6007
18 QPushButton 의 커스텀 이미지버튼 file makersweb 2019.11.05 6424
» Qt애플리케이션 객체(QCoreApplication, QGuiApplication, QApplication) 에 대해서 makersweb 2019.11.11 10150
16 QScopedPointer 소개 및 사용법 makersweb 2019.11.29 1033
15 QThread 소개 및 예제 makersweb 2019.12.25 19580
14 QLabel의 텍스트 색과 배경색을 변경 makersweb 2020.02.25 6668
13 컨테이너 클래스 - QVector makersweb 2020.03.17 2866
12 재진입(Reentrancy) 및 스레드 안전성(Thread-Safety) makersweb 2020.04.19 1222
11 Qt로 데이터를 직렬화(serialization)하는 방법 makersweb 2020.08.04 2075
10 main함수 명령줄 옵션 해석 makersweb 2020.09.01 2247
9 QRandomGenerator 클래스를 사용하여 난수(random values) 생성 makersweb 2020.10.17 1582
8 QThread 및 QMutex 예제 makersweb 2021.01.12 1358
7 응용프로그램 자동실행 설정 (on Windows) makersweb 2021.05.08 567
6 HTTPS URL을 연결할 때 SslHandshakeFailedError 오류 makersweb 2022.07.31 362
5 Qt 스마트 포인터 (QSharedPointer, QScopedPointer, QPointer) makersweb 2022.08.18 1151
4 하드디스크 드라이브 여유 공간 계산 file makersweb 2023.01.15 542
3 QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 944
2 Base64로 인코딩된 파일을 복원 makersweb 2023.08.06 482
1 QML의 사용자 정의 Image makersweb 2023.09.17 599