이 페이지에서

QCoreApplication Class

QCoreApplication 클래스는 UI가 없는 Qt 애플리케이션을 위한 이벤트 루프를 제공합니다. 더 보기...

헤더: #include <QCoreApplication>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속: QObject
상속받는 항목:

QAndroidService 그리고 QGuiApplication

속성

공개 함수

QCoreApplication(int &argc, char **argv)
virtual ~QCoreApplication()
(since 6.5) Qt::PermissionStatus checkPermission(const QPermission &permission)
void installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
virtual bool notify(QObject *receiver, QEvent *event)
void removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)
(since 6.5) void requestPermission(const QPermission &permission, Functor &&functor)
(since 6.5) void requestPermission(const QPermission &permission, const QObject *context, Functor functor)

공개 슬롯

void exit(int returnCode = 0)
void quit()

신호

void aboutToQuit()

정적 공용 멤버

void addLibraryPath(const QString &path)
QString applicationDirPath()
QString applicationFilePath()
QString applicationName()
qint64 applicationPid()
QString applicationVersion()
QStringList arguments()
bool closingDown()
QAbstractEventDispatcher *eventDispatcher()
int exec()
bool installTranslator(QTranslator *translationFile)
QCoreApplication *instance()
bool isQuitLockEnabled()
bool isSetuidAllowed()
QStringList libraryPaths()
QString organizationDomain()
QString organizationName()
void postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)
void processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)
(since 6.7) void processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline)
void processEvents(QEventLoop::ProcessEventsFlags flags, int ms)
void removeLibraryPath(const QString &path)
void removePostedEvents(QObject *receiver, int eventType = 0)
bool removeTranslator(QTranslator *translationFile)
bool sendEvent(QObject *receiver, QEvent *event)
void sendPostedEvents(QObject *receiver = nullptr, int event_type = 0)
void setApplicationName(const QString &application)
void setApplicationVersion(const QString &version)
void setAttribute(Qt::ApplicationAttribute attribute, bool on = true)
void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
void setLibraryPaths(const QStringList &paths)
void setOrganizationDomain(const QString &orgDomain)
void setOrganizationName(const QString &orgName)
void setQuitLockEnabled(bool enabled)
void setSetuidAllowed(bool allow)
bool startingUp()
bool testAttribute(Qt::ApplicationAttribute attribute)
QString translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)

재구현된 보호 함수

virtual bool event(QEvent *e) override
void qAddPostRoutine(QtCleanUpFunction ptr)
void qRemovePostRoutine(QtCleanUpFunction ptr)

매크로

Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr)
Q_DECLARE_TR_FUNCTIONS(context)

상세 설명

이 클래스는 비 GUI 애플리케이션이 이벤트 루프를 구현하는 데 사용됩니다. Qt를 사용하는 비 GUI 애플리케이션의 경우, 정확히 하나의 QCoreApplication 객체가 있어야 합니다. GUI 애플리케이션에 대해서는 QGuiApplication 를 참조하십시오. Qt Widgets 모듈을 사용하는 애플리케이션에 대해서는 QApplication 를 참조하십시오.

QCoreApplication은 운영 체제(예: 타이머 및 네트워크 이벤트) 및 기타 소스에서 발생하는 모든 이벤트를 처리하고 전달하는 메인 이벤트 루프를 포함합니다. 또한 애플리케이션의 초기화 및 종료 처리와 시스템 전체 및 애플리케이션 전체에 대한 설정도 관리합니다.

이벤트 루프 및 이벤트 처리

이벤트 루프는 ` exec()` 호출로 시작됩니다. 장시간 실행되는 작업의 경우, 애플리케이션의 응답성을 유지하기 위해 ` processEvents()`를 호출할 수 있습니다.

일반적으로 main() 함수 내에서 가능한 한 빨리 QCoreApplication, QGuiApplication 또는 QApplication 객체를 생성할 것을 권장합니다. exec()은 이벤트 루프가 종료될 때까지(예: quit()가 호출될 때) 반환되지 않습니다.

또한 몇 가지 정적 편의 함수가 제공됩니다. QCoreApplication 객체는 instance()을 통해 사용할 수 있습니다. 이벤트는 sendEvent()을 사용하여 전송하거나, postEvent()을 사용하여 이벤트 큐에 게시할 수 있습니다. 보류 중인 이벤트는 removePostedEvents()을 사용하여 제거하거나, sendPostedEvents()을 사용하여 전달할 수 있습니다.

이 클래스는 quit() 슬롯과 aboutToQuit() 시그널을 제공합니다.

애플리케이션 및 라이브러리 경로

애플리케이션에는 applicationDirPath() 및 applicationFilePath()가 있습니다. 라이브러리 경로( QLibrary 참조)는 libraryPaths()를 사용하여 가져올 수 있으며, setLibraryPaths(), addLibraryPath() 및 removeLibraryPath()를 사용하여 조작할 수 있습니다.

국제화 및 번역

installTranslator() 및 removeTranslator()을 사용하여 번역 파일을 추가하거나 제거할 수 있습니다. translate()을 사용하여 애플리케이션 문자열을 번역할 수 있습니다. QObject::tr() 함수는 translate()을 기반으로 구현되었습니다.

명령줄 인자 접근

QCoreApplication의 생성자에 전달된 명령줄 인수는 arguments() 함수를 사용하여 접근해야 합니다.

참고: QCoreApplication은 -qmljsdebugger="..." 옵션을 제거합니다. 이 함수는 qmljsdebugger 의 인수를 파싱한 후, 이 옵션과 해당 인수를 제거합니다.

보다 고급 명령줄 옵션 처리를 위해서는 QCommandLineParser 객체를 생성하십시오.

로케일 설정

Unix/Linux에서 Qt는 기본적으로 시스템 로케일 설정을 사용하도록 구성되어 있습니다. 이로 인해 POSIX 함수를 사용할 때, 예를 들어 부동 소수점(float)과 문자열(string)과 같은 데이터 유형 간 변환 시 로케일에 따라 표기법이 다를 수 있으므로 충돌이 발생할 수 있습니다. 이 문제를 해결하려면 QApplication, QGuiApplication 또는 QCoreApplication을 초기화한 직후 POSIX 함수 setlocale(LC_NUMERIC,"C") 를 호출하여 숫자 서식에 사용되는 로케일을 "C" 로케일로 재설정하십시오.

QGuiApplication, QAbstractEventDispatcher, QEventLoop, 세마포어를 사용하는 프로듀서 및 컨슈머, 대기 조건을 사용하는 프로듀서 및 컨슈머항목도 참조하십시오 .

속성 문서

applicationName : QString

이 속성은 이 애플리케이션의 이름을 저장합니다.

애플리케이션 이름은 다양한 Qt 클래스와 모듈에서 사용되며, 특히 기본 생성자를 사용하여 생성될 때 ` QSettings `에서 가장 두드러지게 사용됩니다. 그 밖의 용도로는 서식 지정된 로깅 출력(` qSetMessagePattern()` 참조), ` QCommandLineParser`의 출력, ` QTemporaryDir ` 및 ` QTemporaryFile `의 기본 경로, 그리고 ` QStandardPaths`의 일부 파일 위치 등이 있습니다. Qt D-Bus, 접근성 및 XCB 플랫폼 통합 기능도 애플리케이션 이름을 사용합니다.

설정되지 않은 경우, 애플리케이션 이름은 기본적으로 실행 파일 이름으로 설정됩니다.

액세스 기능:

QString applicationName()
void setApplicationName(const QString &application)

organizationName, organizationDomain, applicationVersion 및 applicationFilePath()도 참조하십시오 .

applicationVersion : QString

이 속성은 이 애플리케이션의 버전을 저장합니다.

설정되지 않은 경우, 애플리케이션 버전은 메인 애플리케이션 실행 파일 또는 패키지에서 결정된 플랫폼별 값으로 기본 설정됩니다(Qt 5.9부터):

플랫폼소스
Windows(클래식 데스크톱)VERSIONINFO 리소스의 PRODUCTVERSION 매개변수
macOS, iOS, tvOS, watchOS정보 속성 목록의 CFBundleVersion 속성
AndroidAndroidManifest.xml 매니페스트 요소의 android:versionName 속성
HarmonyOSapp.json5 구성 파일의 versionName 필드

다른 플랫폼에서는 기본값이 빈 문자열입니다.

액세스 함수:

QString applicationVersion()
void setApplicationVersion(const QString &version)

applicationName, organizationName 및 organizationDomain도 참조하십시오 .

organizationDomain : QString

이 속성은 이 애플리케이션을 작성한 조직의 인터넷 도메인을 저장합니다.

이 값은 QSettings 클래스가 기본 생성자를 사용하여 생성될 때 사용됩니다. 이를 통해 QSettings 객체를 생성할 때마다 이 정보를 반복해서 지정할 필요가 없습니다.

Mac에서 QSettings 는 organizationDomain()이 빈 문자열이 아닌 경우 이를 조직명으로 사용하며, 그렇지 않은 경우 organizationName()을 사용합니다. 그 외 모든 플랫폼에서 QSettings 는 organizationName()을 조직명으로 사용합니다.

액세스 함수:

QString organizationDomain()
void setOrganizationDomain(const QString &orgDomain)

organizationName, applicationName 및 applicationVersion도 참조하십시오 .

organizationName : QString

이 속성은 이 애플리케이션을 작성한 조직의 이름을 저장합니다.

이 값은 QSettings 클래스가 기본 생성자를 사용하여 생성될 때 사용됩니다. 이를 통해 QSettings 객체를 생성할 때마다 이 정보를 반복해서 지정할 필요가 없습니다.

Mac에서 ` QSettings `는 ` organizationDomain()`의 값이 빈 문자열이 아닐 경우 이를 조직명으로 사용하며, 그렇지 않은 경우 `organizationName()`을 사용합니다. 그 외 모든 플랫폼에서 ` QSettings `는 `organizationName()`을 조직명으로 사용합니다.

액세스 함수:

QString organizationName()
void setOrganizationName(const QString &orgName)

organizationDomain 및 applicationName도 참조하십시오 .

quitLockEnabled : bool

이 속성은 ‘ QEventLoopLocker ’ 기능의 사용으로 인해 애플리케이션이 종료될 수 있는지 여부를 나타냅니다.

이 속성이 ` true `로 설정된 경우, 애플리케이션에서 실행 중인 마지막 남은 ` QEventLoopLocker `이 해제될 때 애플리케이션 종료가 시도됩니다.

예를 들어, 아직 열려 있는 창이 있거나 ' QEvent::Quit ' 이벤트가 무시되는 경우 등, 종료 시도가 반드시 애플리케이션의 종료로 이어지는 것은 아니라는 점에 유의하십시오.

기본값은 ` true`입니다.

액세스 함수:

bool isQuitLockEnabled()
void setQuitLockEnabled(bool enabled)

QEventLoopLocker도 참조하십시오 .

멤버 함수 문서

QCoreApplication::QCoreApplication(int &argc, char **argv)

Qt Core 애플리케이션을 생성합니다. Qt Core 애플리케이션이란 그래픽 사용자 인터페이스가 없는 애플리케이션을 말합니다. 이러한 애플리케이션은 콘솔에서 사용되거나 서버 프로세스로 실행됩니다.

argc 및 argv 인수는 애플리케이션에 의해 처리되며, arguments() 함수를 통해 보다 편리한 형태로 제공됩니다.

경고: argc 및 argv 가 참조하는데이터는 QCoreApplication 객체의 전체 수명 동안 유효해야 합니다. 또한, argc 는 0보다 커야 하며, argv 에는 적어도 하나의 유효한 문자열이 포함되어야 합니다.

[virtual noexcept] QCoreApplication::~QCoreApplication()

QCoreApplication 객체를 삭제합니다.

[private signal] void QCoreApplication::aboutToQuit()

이 신호는 애플리케이션이 메인 이벤트 루프에서 빠져나가려는 순간, 예를 들어 이벤트 루프 레벨이 0으로 떨어질 때 발생합니다. 이는 애플리케이션 내부에서 ` quit()`를 호출한 후나, 사용자가 전체 데스크톱 세션을 종료할 때 발생할 수 있습니다.

이 신호는 애플리케이션이 마지막 순간에 정리 작업을 수행해야 할 때 특히 유용합니다. 이 상태에서는 사용자 상호작용이 불가능하다는 점에 유의하십시오.

참고: 이 시점에서 메인 이벤트 루프는 여전히 실행 중이지만, deleteLater()를 통해 삭제된 객체에 대한 QEvent::DeferredDelete 이벤트를 제외하고는 반환 시 더 이상의 이벤트를 처리하지 않습니다. 이벤트 처리가 필요한 경우, 중첩된 이벤트 루프를 사용하거나 QCoreApplication::processEvents()를 수동으로 호출하십시오.

참고: 이 신호는 비공개 신호입니다. 신호 연결에서 사용할 수 있지만, 사용자가 직접 발생시킬 수는 없습니다.

quit()도 참조하십시오 .

[static] void QCoreApplication::addLibraryPath(const QString &path)

라이브러리 경로 목록의 맨 앞에 path 을 추가하여, 해당 경로에서 라이브러리를 가장 먼저 검색하도록 합니다. path 이 비어 있거나 이미 경로 목록에 포함된 경우, 경로 목록은 변경되지 않습니다.

기본 경로 목록은 하나 또는 두 개의 항목으로 구성됩니다. 첫 번째 항목은 플러그인 설치 디렉터리인 INSTALL/plugins 이며, 여기서 INSTALL 는 Qt가 설치된 디렉터리입니다. 두 번째 항목은 애플리케이션 자체의 디렉터리(현재 디렉터리가아님 )이지만, 이는 QCoreApplication 객체가 인스턴스화된 후에만 적용됩니다.

QCoreApplication 의 인스턴스가 소멸되면 라이브러리 경로는 기본값으로 재설정됩니다.

경고: QLibrary 는 현재 절대 경로가 아닌 라이브러리 경로를 조회하는 데 지정된 경로를 사용하지 않습니다.

removeLibraryPath(), libraryPaths() 및 setLibraryPaths()도 참조하십시오 .

[static] QString QCoreApplication::applicationDirPath()

애플리케이션 실행 파일이 포함된 디렉터리를 반환합니다.

예를 들어, Qt를 C:\Qt 디렉터리에 설치한 상태에서 regexp 예제를 실행하면, 이 함수는 "C:/Qt/examples/tools/regexp"를 반환합니다.

macOS 및 iOS에서는 이 함수가 실제로 실행 파일이 포함된 디렉터리를 가리키게 되며, 이 디렉터리는 애플리케이션 번들 내부에 있을 수도 있습니다(애플리케이션이 번들로 구성된 경우).

Android에서는 이 함수가 실제로 실행 파일이 들어 있는 디렉터리를 가리키게 되며, 이 디렉터리는 애플리케이션 APK 내부에 있을 수도 있습니다(압축되지 않은 라이브러리 지원으로 빌드된 경우).

경고: Linux에서 이 함수는 /proc 파일 시스템에서 경로를 가져오려고 시도합니다. 이 작업이 실패하면, argv[0] 에 실행 파일의 절대 파일 이름이 포함되어 있다고 가정합니다. 또한 이 함수는 현재 디렉터리가 애플리케이션에 의해 변경되지 않았다고 가정합니다.

applicationFilePath()도 참조하십시오 .

[static] QString QCoreApplication::applicationFilePath()

애플리케이션 실행 파일의 파일 경로를 반환합니다.

예를 들어, Qt를 /usr/local/qt 디렉터리에 설치한 상태에서 regexp 예제를 실행하면, 이 함수는 "/usr/local/qt/examples/tools/regexp/regexp"를 반환합니다.

경고: 리눅스에서 이 함수는 /proc 파일 시스템에서 경로를 가져오려고 시도합니다. 이 작업이 실패하면, argv[0] 에 실행 파일의 절대 경로가 포함되어 있다고 가정합니다. 또한 이 함수는 애플리케이션에 의해 현재 디렉터리가 변경되지 않았다고 가정합니다.

applicationDirPath()도 참조하십시오 .

[static noexcept] qint64 QCoreApplication::applicationPid()

애플리케이션의 현재 프로세스 ID를 반환합니다.

[static] QStringList QCoreApplication::arguments()

명령줄 인수의 목록을 반환합니다.

일반적으로 arguments().at(0)은 프로그램 이름이고, arguments().at(1)은 첫 번째 인자이며, arguments().last()는 마지막 인자입니다. Windows에 대한 아래 참고 사항을 확인하십시오.

이 함수를 호출하는 데는 시간이 오래 걸리므로, 명령줄을 파싱할 때는 결과를 변수에 저장해야 합니다.

경고: 유닉스에서는 이 목록이 main() 함수 내의 생성자에 전달된 argc 및 argv 매개변수를 바탕으로 구성됩니다. argv 내의 문자열 데이터는 ` QString::fromLocal8Bit()`를 사용하여 해석되므로, 예를 들어 Latin1 로케일에서 실행되는 시스템에서는 일본어 명령줄 인수를 전달할 수 없습니다. 대부분의 최신 유닉스 시스템은 유니코드 기반이므로 이러한 제한이 없습니다.

Windows에서는 수정된 argv/argc 매개변수가 생성자에 전달된 경우에만 argc 및 argv 매개변수를 기반으로 목록이 생성됩니다. 이 경우 인코딩 문제가 발생할 수 있습니다.

그렇지 않은 경우, arguments()는 GetCommandLine()의 반환값을 바탕으로 생성됩니다. 이로 인해 Windows에서 arguments().at(0)이 반환하는 문자열이 애플리케이션을 시작하는 데 사용된 정확한 프로그램명이 아닐 수도 있습니다.

applicationFilePath() 및 QCommandLineParser도 참조하십시오 .

[since 6.5] Qt::PermissionStatus QCoreApplication::checkPermission(const QPermission &permission)

지정된 항목의 상태를 확인합니다. permission

결과가 ` Qt::PermissionStatus::Undetermined `인 경우, 사용자의 의도를 파악하기 위해 ` requestPermission()`를 통해 권한을 요청해야 합니다.

이 함수는 Qt 6.5에서 도입되었습니다.

requestPermission() 및 애플리케이션 권한항목도 참조하십시오 .

[static] bool QCoreApplication::closingDown()

애플리케이션 객체가 소멸 중인 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.

startingUp()도 참조하십시오 .

[override virtual protected] bool QCoreApplication::event(QEvent *e)

QObject::event(QEvent *e)를 재구현합니다.

[static] QAbstractEventDispatcher *QCoreApplication::eventDispatcher()

메인 스레드의 이벤트 디스패처 객체에 대한 포인터를 반환합니다. 해당 스레드에 이벤트 디스패처가 없는 경우, 이 함수는 ` nullptr`을 반환합니다.

setEventDispatcher()도 참조하십시오 .

[static] int QCoreApplication::exec()

메인 이벤트 루프로 진입하여 exit()이 호출될 때까지 대기합니다. exit()에 전달된 값을 반환합니다( quit()을 통해 exit()이 호출된 경우 이 값은 0입니다).

이 함수를 호출해야 이벤트 처리가 시작됩니다. 메인 이벤트 루프는 윈도우 시스템으로부터 이벤트를 수신하여 이를 애플리케이션 위젯에 전달합니다.

애플리케이션이 유휴 처리를 수행하도록 하려면(대기 중인 이벤트가 없을 때마다 특수한 함수를 실행함으로써), 타임아웃을 0ns로 설정한 QChronoTimer 를 사용하십시오. 더 정교한 유휴 처리 방식은 processEvents()을 사용하여 구현할 수 있습니다.

일부 플랫폼에서는 exec() 호출이 반환되지 않을 수 있으므로, 애플리케이션의 main() 함수에 정리 코드를 넣는 대신 aboutToQuit() 신호에 연결하는 것을 권장합니다. 예를 들어, Windows에서 사용자가 로그오프하면 시스템은 Qt가 모든 최상위 창을 닫은 후에 프로세스를 종료합니다. 따라서 exec() 호출 후 main() 함수의 끝 부분에서 애플리케이션이 이벤트 루프를 종료하고 코드를 실행할 시간이 있을 것이라는 보장은 없습니다.

quit(), exit(), processEvents(), QApplication::exec()도 참조하십시오 .

[static slot] void QCoreApplication::exit(int returnCode = 0)

애플리케이션이 반환 코드를 반환하며 종료되도록 지시합니다.

이 함수가 호출된 후, 애플리케이션은 메인 이벤트 루프를 벗어나 exec() 호출에서 반환됩니다. exec() 함수는 returnCode 를 반환합니다. 이벤트 루프가 실행 중이 아닐 경우, 이 함수는 아무 작업도 수행하지 않습니다.

관례에 따라, returnCode 의 값이 0이면 성공을 의미하며, 0이 아닌 값은 오류를 나타냅니다.

항상 QueuedConnection 을 사용하여 신호를 이 슬롯에 연결하는 것이 좋습니다. 제어권이 메인 이벤트 루프로 들어가기 전(예: "int main"이 exec()을 호출하기 전)에 이 슬롯에 연결된(큐에 추가되지 않은) 신호가 발생하면, 슬롯은 아무런 효과도 발휘하지 못하며 애플리케이션은 종료되지 않습니다. 큐에 등록된 연결을 사용하면 제어 흐름이 메인 이벤트 루프로 진입한 후에야 슬롯이 호출되도록 보장할 수 있습니다.

동일한 이름의 C 라이브러리 함수와는 달리, 이 함수는 호출자에게 반환된다는 점에 유의하십시오. 즉, 이벤트 처리가 중지되는 것입니다.

또한 이 함수는 스레드 안전하지 않다는 점에 유의하십시오. 이 함수는 메인 스레드( QCoreApplication 객체가 이벤트를 처리하는 스레드)에서만 호출되어야 합니다. 다른 스레드에서 애플리케이션의 종료를 요청하려면 QCoreApplication::quit()를 사용하거나, 대신 메인 스레드에서 QMetaMethod::invokeMethod()를 사용하여 이 함수를 호출하십시오.

quit() 및 exec()도 참조하십시오 .

void QCoreApplication::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)

메인 스레드에서 애플리케이션이 수신하는 모든 네이티브 이벤트에 대해 이벤트 필터 filterObj 를 설치합니다.

이벤트 필터 ` filterObj `는 메인 스레드에서 수신된 모든 네이티브 이벤트에 대해 호출되는 ` nativeEventFilter()` 함수를 통해 이벤트를 수신합니다.

QAbstractNativeEventFilter::nativeEventFilter() 함수는 이벤트를 필터링(즉, 중지)해야 하는 경우 true를 반환해야 합니다. 정상적인 Qt 처리가 계속되도록 하려면 false를 반환해야 합니다. 그러면 네이티브 이벤트는 QEvent 로 변환되어 표준 Qt event 필터링(예: QObject::installEventFilter())을 통해 처리될 수 있습니다.

여러 이벤트 필터가 설치된 경우, 가장 마지막에 설치된 필터가 먼저 활성화됩니다.

참고: 여기에 설정된 필터함수는 네이티브 메시지, 즉 MSG 또는 XCB 이벤트 구조체를 수신합니다.

참고: Qt::AA_PluginApplication 속성이 설정되면 애플리케이션에서네이티브 이벤트 필터가 비활성화됩니다.

이식성을 극대화하려면 가능한 한 항상 QEvent 및 QObject::installEventFilter()를 사용해야 합니다.

QObject::installEventFilter()도 참조하십시오 .

[static] bool QCoreApplication::installTranslator(QTranslator *translationFile)

translationFile 번역 파일을 번역에 사용될 번역 파일 목록에 추가합니다.

여러 개의 번역 파일을 설치할 수 있습니다. 번역은 설치된 순서의 역순으로 검색되므로, 가장 최근에 설치된 번역 파일이 먼저 검색되고, 가장 먼저 설치된 번역 파일이 마지막에 검색됩니다. 일치하는 문자열이 포함된 번역이 발견되는 즉시 검색이 중단됩니다.

QTranslator 를 설치하거나 제거하거나, 설치된 QTranslator 를 변경하면 QCoreApplication 인스턴스에 대해 LanguageChange 이벤트가 발생합니다. QApplication 인스턴스는 이 이벤트를 모든 최상위 위젯으로 전파하며, 여기서 changeEvent를 재구현하여 tr() 함수를 통해 사용자에게 표시되는 문자열을 각 속성 설정자(property setter)에 전달함으로써 사용자 인터페이스를 다시 번역할 수 있습니다. Qt Widgets Designer 에서 생성된 사용자 인터페이스 클래스는 호출할 수 있는 retranslateUi() 함수를 제공합니다.

이 함수는 성공 시 true 를, 실패 시 false 를 반환합니다.

참고: QCoreApplication 는 translationFile 의 소유권을 인수하지 않습니다. 함수가 true 를 반환한 경우, translationFile 객체가 해당 객체에 대해 removeTranslator()가 호출되거나 애플리케이션이 종료될 때까지 유효하도록 보장하는 것은 애플리케이션의 책임입니다.

removeTranslator(), translate(), QTranslator::load() 및 ‘동적 언어 변경에 대비하기’항목도 참조하십시오 .

[static noexcept] QCoreApplication *QCoreApplication::instance()

애플리케이션의 QCoreApplication (또는 QGuiApplication/QApplication) 인스턴스에 대한 포인터를 반환합니다.

인스턴스가 할당되지 않은 경우 nullptr 가 반환됩니다.

데이터 경합 주의 사항: 호출자 코드가 C++20으로 컴파일되지 않은 경우, 보조 스레드에서 QCoreApplication 인스턴스의 존재 여부를 확인하는 데 이 함수를 사용해서는 안 됩니다.

[static] bool QCoreApplication::isSetuidAllowed()

UNIX 플랫폼에서 해당 애플리케이션이 setuid를 실행할 수 있는 경우 true를 반환합니다.

QCoreApplication::setSetuidAllowed()도 참조하십시오 .

[static] QStringList QCoreApplication::libraryPaths()

애플리케이션이 라이브러리를 동적으로 로드할 때 검색할 경로 목록을 반환합니다.

QCoreApplication 가 생성되면 이 함수의 반환값이 변경될 수 있습니다. QCoreApplication 를 생성하기 전에 이 함수를 호출하는 것은 권장되지 않습니다. 애플리케이션 실행 파일의 디렉터리(작업 디렉터리가아님 )가 알려진 경우, 이 목록에 포함됩니다. 이를 알리려면 QCoreApplication 를 생성해야 하며, 이 객체는 argv[0] 를 사용하여 해당 경로를 찾습니다.

Qt는 기본 라이브러리 경로를 제공하지만, qt.conf 파일을 사용하여 경로를 설정할 수도 있습니다. 이 파일에 지정된 경로는 기본값보다 우선합니다. qt.conf 파일이 애플리케이션 실행 파일의 디렉터리에 있는 경우, QCoreApplication 가 생성될 때까지 파일이 발견되지 않을 수 있다는 점에 유의하십시오. 이 함수를 호출할 때 파일이 발견되지 않으면 기본 라이브러리 경로가 사용됩니다.

이 목록에는 플러그인이 존재하는 경우 해당 플러그인의 설치 디렉터리가 포함됩니다(플러그인의 기본 설치 디렉터리는 INSTALL/plugins 이며, 여기서 INSTALL 은 Qt가 설치된 디렉터리입니다). QT_PLUGIN_PATH 환경 변수의 콜론(:)으로 구분된 항목은 항상 추가됩니다. 플러그인 설치 디렉터리(및 그 존재 여부)는 애플리케이션 실행 파일의 디렉터리가 확인되면 변경될 수 있습니다.

경고: 이 함수는 현재 기본 경로에 QLibraryInfo::LibrariesPath 를 포함하지 않으며, QLibrary 는 현재 이 함수를 사용하여 절대 경로가 아닌 라이브러리 경로를 조회하지 않습니다.

setLibraryPaths(), addLibraryPath(), removeLibraryPath(), QLibrary 및 Qt 플러그인 생성 방법도참조하십시오 .

[virtual] bool QCoreApplication::notify(QObject *receiver, QEvent *event)

event 를 receiver 로 전송합니다: receiver->event(event). 수신자의 이벤트 핸들러에서 반환된 값을 반환합니다. 이 함수는 어떤 스레드에서든 어떤 객체로든 전송된 모든 이벤트에 대해 호출된다는 점에 유의하십시오.

특정 유형의 이벤트(예: 마우스 및 키 이벤트)의 경우, 수신자가 해당 이벤트에 관심이 없는 경우(즉, ` false`를 반환하는 경우), 이벤트는 수신자의 부모 객체로 전파되며, 최상위 객체에 도달할 때까지 계속 전파됩니다.

이벤트를 처리하는 방법에는 다섯 가지가 있으며, 이 가상 함수를 재구현하는 것은 그중 하나일 뿐입니다. 다섯 가지 접근 방식은 다음과 같습니다:

  1. paintEvent(), mousePressEvent() 등을 재구현하는 방법입니다. 이는 가장 일반적이고, 가장 쉬우며, 가장 기능이 제한적인 방법입니다.
  2. 이 함수를 재구현하는 방법. 이 방법은 매우 강력하여 완전한 제어를 제공하지만, 한 번에 하나의 하위 클래스만 활성화될 수 있습니다.
  3. QCoreApplication::instance()에 이벤트 필터를 설치하는 방법. 이러한 이벤트 필터는 모든 위젯에 대한 모든 이벤트를 처리할 수 있으므로 notify()를 재구현하는 것만큼 강력합니다. 게다가 애플리케이션 전체에 적용되는 이벤트 필터를 여러 개 가질 수도 있습니다. 전역 이벤트 필터는 disabled widgets 에 대한 마우스 이벤트까지 감지합니다. 단, 애플리케이션 이벤트 필터는 메인 스레드에 존재하는 객체에 대해서만 호출된다는 점에 유의하십시오.
  4. QObject::event()을 재구현하는 방법( QWidget 에서와 같이). 이렇게 하면 Tab 키 누름 이벤트를 받을 수 있으며, 위젯별 이벤트 필터보다 먼저 해당 이벤트를 확인할 수 있습니다.
  5. 객체에 이벤트 필터를 설치합니다. 이러한 이벤트 필터는 포커스 위젯을 변경하지 않는 한, Tab 및 Shift+Tab 키 입력 이벤트를 포함한 모든 이벤트를 수신합니다.

향후 방향: Qt 7에서는 메인 스레드 외부에 존재하는 객체에 대해서는 이 함수가 호출되지 않을 예정입니다. 해당 기능이 필요한 애플리케이션은 당분간 이벤트 검사 요구 사항을 충족할 다른 해결책을 찾아야 합니다. 이 변경 사항은 메인 스레드로 확대될 수 있으며, 이 경우 이 함수는 더 이상 사용되지 않게 될 것입니다.

경고: 이 함수를 재정의하는경우 , 애플리케이션 객체가 소멸되기 전에 이벤트를 처리하는 모든 스레드가 처리를 중단하도록 해야 합니다. 여기에는 사용 중인 다른 라이브러리가 시작한 스레드도 포함되지만, Qt 자체 스레드에는 적용되지 않습니다.

QObject::event() 및 installNativeEventFilter()도 참조하십시오 .

[static] void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority = Qt::NormalEventPriority)

event 이벤트를 이벤트 큐에 추가하고, receiver 객체를 이벤트의 수신자로 지정하며, 즉시 반환합니다.

이벤트는 힙에 할당되어야 합니다. 이벤트 큐가 이벤트에 대한 소유권을 가져가며, 이벤트가 게시된 후 이를 삭제하기 때문입니다. 이벤트가 게시된 후에는 해당 이벤트에 접근하는 것이 안전하지 않습니다.

제어가 메인 이벤트 루프로 돌아오면, 큐에 저장된 모든 이벤트는 notify() 함수를 사용하여 전송됩니다.

이벤트는 priority 순서대로 내림차순으로 정렬됩니다. 즉, priority 값이 높은 이벤트가 priority 값이 낮은 이벤트보다 먼저 큐에 들어갑니다. priority 는 INT_MAX와 INT_MIN 사이의 모든 정수 값(두 값 포함)일 수 있습니다. 자세한 내용은 Qt::EventPriority 을 참조하십시오. priority 값이 동일한 이벤트는 게시된 순서대로 처리됩니다.

참고: ` QObject::deleteLater()`는 객체의 삭제를 연기하도록 스케줄링하며, 이는 일반적으로 수신자의 이벤트 루프에서 처리됩니다. 스레드에서 실행 중인 이벤트 루프가 없는 경우, 삭제는 스레드가 종료될 때 수행됩니다. 일반적이고 안전한 패턴은 스레드의 `finished()` 신호를 객체의 ` deleteLater()` 슬롯에 연결하는 것입니다:

QObject::connect(thread, &QThread::finished, worker, &QObject::deleteLater);

참고: 이 함수는 스레드 안전합니다.

sendEvent(), notify(), sendPostedEvents() 및 Qt::EventPriority도 참조하십시오 .

[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents)

지정된 flags 에 따라 호출 스레드의 대기 중인 이벤트 일부를 처리합니다.

이 함수의 사용은 권장되지 않습니다. 대신, 시간이 오래 걸리는 작업은 GUI 스레드에서 보조 스레드로 옮기고, 중첩된 이벤트 루프 처리는 완전히 피하는 것이 좋습니다. 이벤트 처리가 정말로 필요한 경우, 대신 ` QEventLoop `를 사용하는 것을 고려하십시오.

이벤트 루프 없이 이 함수를 지속적으로 호출하는 로컬 루프를 실행하는 경우, ` DeferredDelete ` 이벤트는 처리되지 않습니다. 이는 ` DeferredDelete ` 이벤트에 의존하여 정상적으로 작동하는 위젯(예: ` QToolTip`)의 동작에 영향을 줄 수 있습니다. 대안으로는 해당 로컬 루프 내부에서 ` sendPostedEvents()`를 호출하는 방법이 있습니다.

이 함수를 호출하면 호출한 스레드에 대한 이벤트만 처리되며, 처리 가능한 모든 이벤트가 처리된 후에 반환됩니다. 처리 가능한 이벤트란 함수 호출 전에 대기열에 추가된 이벤트를 의미합니다. 즉, 함수 실행 중에 게시된 이벤트는 다음 이벤트 처리 단계까지 대기열에 남아 있게 됩니다.

참고: 이 함수는 스레드 안전합니다.

관련 항목: exec(), QTimer, QChronoTimer, QEventLoop::processEvents(), sendPostedEvents().

[static, since 6.7] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline)

deadline 의 유효 기간이 만료되거나 처리할 이벤트가 더 이상 없을 때까지, 둘 중 먼저 발생하는 시점까지 호출 스레드의 대기 중인 이벤트를 처리합니다.

이 함수의 사용은 권장되지 않습니다. 대신, 긴 작업은 GUI 스레드에서 보조 스레드로 옮기고, 중첩된 이벤트 루프 처리는 완전히 피하는 것이 좋습니다. 이벤트 처리가 정말로 필요한 경우, 대신 ` QEventLoop `를 사용하는 것을 고려하십시오.

이 함수를 호출하면 호출 스레드의 이벤트만 처리됩니다.

참고: processEvents() 오버로드와달리 , 이 함수는 함수가 실행되는 동안 포스팅된 이벤트도 처리합니다.

참고: 타임아웃 전에 큐에 추가된모든 이벤트는 처리 시간이 얼마나 걸리든 상관없이 처리됩니다.

이 함수는 오버로드된 함수입니다.

참고: 이 함수는 스레드 안전합니다.

이 함수는 Qt 6.7에서 도입되었습니다.

exec(), QTimer, QChronoTimer 및 QEventLoop::processEvents()도 참조하십시오 .

[static] void QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags, int ms)

호출 스레드에 대한 대기 중인 이벤트를 ms 밀리초 동안 처리하거나, 처리할 이벤트가 더 이상 없을 때까지 처리하며, 두 경우 중 더 짧은 시간을 기준으로 합니다.

이는 다음 호출과 동일합니다:

QCoreApplication::processEvents(flags, QDeadlineTimer(ms));

이것은 오버로드된 함수입니다.

[static slot] void QCoreApplication::quit()

응용 프로그램의 종료를 요청합니다.

예를 들어, 응용 프로그램의 창 중 하나를 닫을 수 없는 경우 등, 응용 프로그램이 종료를 차단하면 이 요청이 무시될 수 있습니다. 응용 프로그램은 응용 프로그램 수준에서 ` QEvent::Quit ` 이벤트를 처리하거나, 개별 창에 대해 ` QEvent::Close ` 이벤트를 처리함으로써 이에 영향을 줄 수 있습니다.

종료가 중단되지 않으면 응용 프로그램은 반환 코드 0(성공)으로 종료됩니다.

중단될 가능성 없이 애플리케이션을 종료하려면 exit()을 직접 호출하십시오. 이 메서드는 스레드 안전하지 않다는 점에 유의하십시오.

QueuedConnection 를 사용하여 신호를 이 슬롯에 항상 연결하는 것이 좋습니다. 제어권이 메인 이벤트 루프로 들어가기 전(예: "int main"이 exec()를 호출하기 전)에 이 슬롯에 연결된(큐에 저장되지 않은) 신호가 발생하면, 슬롯은 아무런 효과를 발휘하지 못하며 애플리케이션은 종료되지 않습니다. 큐에 추가된 연결을 사용하면 제어 흐름이 메인 이벤트 루프로 진입한 후에야 슬롯이 호출되도록 보장할 수 있습니다.

예시:

QPushButton *quitButton = new QPushButton("Quit");
QObject::connect(quitButton, &QPushButton::clicked, &app, &QCoreApplication::quit, Qt::QueuedConnection);

스레드 안전성 참고 사항: 이 함수는 어떤 스레드에서든 호출하여 현재 실행 중인 메인 애플리케이션 루프를 스레드 안전하게 종료시킬 수 있습니다. 그러나 QCoreApplication 객체가 동시에 소멸되고 있는 경우에는 스레드 안전성이 보장되지 않습니다.

참고: 이 함수는 스레드 안전합니다.

참조: exit() 및 aboutToQuit().

[static] void QCoreApplication::removeLibraryPath(const QString &path)

라이브러리 경로 목록에서 ` path `을 제거합니다. ` path `이 비어 있거나 경로 목록에 포함되어 있지 않은 경우, 목록은 변경되지 않습니다.

QCoreApplication 의 인스턴스가 소멸되면 라이브러리 경로는 기본값으로 재설정됩니다.

경고: QLibrary 는 현재 libraryPaths()를 사용하여 비절대 라이브러리 경로를 조회하지 않습니다.

addLibraryPath(), libraryPaths() 및 setLibraryPaths()도 참조하십시오 .

void QCoreApplication::removeNativeEventFilter(QAbstractNativeEventFilter *filterObject)

이 객체에서 이벤트 filterObject 를 제거합니다. 해당 이벤트 필터가 설치되어 있지 않은 경우 이 요청은 무시됩니다.

이 객체가 소멸되면 이 객체에 대한 모든 이벤트 필터가 자동으로 제거됩니다.

이벤트 필터가 활성화된 상태(예: nativeEventFilter() 함수 내에서)라 하더라도 이벤트 필터를 제거하는 것은 항상 안전합니다.

installNativeEventFilter()도 참조하십시오 .

[static] void QCoreApplication::removePostedEvents(QObject *receiver, int eventType = 0)

receiver 에 대해 postEvent()을 사용하여 게시된, 지정된 eventType 의 모든 이벤트를 제거합니다.

이벤트는 디스패치되지 않고 큐에서 제거됩니다. 이 함수를 호출할 필요는 절대 없습니다. 만약 호출할 경우, 이벤트를 강제로 제거하면 receiver 가 하나 이상의 불변 조건을 위반할 수 있음을 유의하십시오.

receiver 가 nullptr 인 경우, eventType 의 이벤트가 모든 객체에 대해 제거됩니다. eventType 가 0인 경우, receiver 의 모든 이벤트가 제거됩니다. eventType 가 0인 상태에서 이 함수를 호출해서는 안 됩니다.

참고: 이 함수는 스레드 안전합니다.

[static] bool QCoreApplication::removeTranslator(QTranslator *translationFile)

이 애플리케이션에서 사용하는 번역 파일 목록에서 번역 파일 ` translationFile `을 제거합니다. (파일 시스템에서 해당 번역 파일을 삭제하지는 않습니다.)

이 함수는 성공 시 true 를 반환하고, 실패 시 false를 반환합니다.

installTranslator(), translate(), QObject::tr()도 참조하십시오 .

[since 6.5] template <typename Functor> void QCoreApplication::requestPermission(const QPermission &permission, Functor &&functor)

지정된 permission 에 대한 요청을 수행합니다.

요청이 준비되면, functor 는 functor(const QPermission &permission) 형태로 호출되며, permission 는 요청의 결과를 설명합니다.

functor 는 독립형 또는 정적 멤버 함수일 수 있습니다:

qApp->requestPermission(QCameraPermission{}, &permissionUpdated);

또는 람다일 수 있습니다:

qApp->requestPermission(QCameraPermission{}, [](const QPermission &permission) {
});

사용자가 요청된 permission 에 대해 애플리케이션에 명시적으로 권한을 부여하거나, 해당 플랫폼에서 permission 가 사용자 인증을 필요로 하지 않는 것으로 확인된 경우, 상태는 Qt::PermissionStatus::Granted 가 됩니다.

사용자가 애플리케이션에 요청된 permission 권한을 명시적으로 거부하거나, permission 권한이 해당 플랫폼의 애플리케이션에 접근할 수 없거나 적용되지 않는 것으로 알려진 경우, 상태는 Qt::PermissionStatus::Denied 가 됩니다.

요청 결과는 절대 Qt::PermissionStatus::Undetermined 가 되지 않습니다.

참고: 권한은 메인 스레드에서만 요청할 수 있습니다.

이 함수는 Qt 6.5에서 도입되었습니다.

checkPermission() 및 애플리케이션 권한도 참조하십시오 .

[since 6.5] template <typename Functor> void QCoreApplication::requestPermission(const QPermission &permission, const QObject *context, Functor functor)

context 컨텍스트에서 지정된 permission 를 요청합니다.

요청이 준비되면, functor 는 functor(const QPermission &permission) 로 호출되며, permission 는 요청의 결과를 설명합니다.

functor 는 독립형 함수이거나 정적 멤버 함수일 수 있습니다:

qApp->requestPermission(QCameraPermission{}, context, &permissionUpdated);

람다:

qApp->requestPermission(QCameraPermission{}, context, [](const QPermission &permission) {
});

context 객체 내의 슬롯:

qApp->requestPermission(QCameraPermission{}, this, &CamerWidget::permissionUpdated);

functor 는 context 객체의 스레드에서 호출됩니다. 요청이 완료되기 전에 context 가 소멸되면, functor 는 호출되지 않습니다.

사용자가 애플리케이션에 요청된 permission 권한을 명시적으로 부여하거나, 해당 플랫폼에서 permission 가 사용자 인증을 필요로 하지 않는 것으로 확인된 경우, 상태는 Qt::PermissionStatus::Granted 가 됩니다.

사용자가 요청된 permission 에 대해 애플리케이션에 명시적으로 거부하거나, permission 가 해당 플랫폼의 애플리케이션에 접근할 수 없거나 적용되지 않는 것으로 알려진 경우, 상태는 Qt::PermissionStatus::Denied 가 됩니다.

요청 결과는 절대 Qt::PermissionStatus::Undetermined 가 되지 않습니다.

참고: 권한은 메인 스레드에서만 요청할 수 있습니다.

이 함수는 오버로드된 함수입니다.

이 함수는 Qt 6.5에서 도입되었습니다.

checkPermission() 및 애플리케이션 권한도 참조하십시오 .

[static] bool QCoreApplication::sendEvent(QObject *receiver, QEvent *event)

notify() 함수를 사용하여 이벤트 event 를 수신자 receiver 로 직접 전송합니다. 이벤트 핸들러에서 반환된 값을 반환합니다.

이벤트가 전송된 후에도 해당 이벤트는 삭제되지 않습니다. 일반적인 방법은 스택에 이벤트를 생성하는 것입니다. 예를 들면 다음과 같습니다.

QMouseEvent event(QEvent::MouseButtonPress, localPos, globalPos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::sendEvent(mainWindow, &event);

postEvent() 및 notify()도 참조하십시오 .

[static] void QCoreApplication::sendPostedEvents(QObject *receiver = nullptr, int event_type = 0)

QCoreApplication::postEvent()를 통해 이전에 큐에 추가된, receiver 객체에 대한 이벤트 중 이벤트 유형이 event_type 인 모든 이벤트를 즉시 디스패치합니다.

창 시스템에서 발생하는 이벤트는 이 함수가 아닌 processEvents()에 의해 처리됩니다.

receiver 가 nullptr 인 경우, event_type 의 이벤트가 모든 객체에 대해 전송됩니다. event_type 가 0인 경우, 모든 이벤트가 receiver 에 대해 전송됩니다.

참고: 이 메서드는 QObject 매개변수인 receiver 이 존재하는 스레드에서 호출되어야 합니다.

참조: postEvent()

[static] void QCoreApplication::setAttribute(Qt::ApplicationAttribute attribute, bool on = true)

on 가 true인 경우 attribute 속성을 설정하고, 그렇지 않은 경우 해당 속성을 지웁니다.

참고: 일부 애플리케이션 속성은 QCoreApplication 인스턴스를 생성하기 전에 설정해야 합니다. 자세한 내용은 Qt::ApplicationAttribute 문서를 참조하십시오.

참조: testAttribute().

[static] void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)

메인 스레드의 이벤트 디스패처를 ` eventDispatcher`로 설정합니다. 이는 아직 이벤트 디스패처가 설치되지 않은 경우에만 가능합니다. 즉, ` QCoreApplication `가 인스턴스화되기 전이어야 합니다. 이 메서드는 해당 객체의 소유권을 가져옵니다.

eventDispatcher()도 참조하십시오 .

[static] void QCoreApplication::setLibraryPaths(const QStringList &paths)

QLibrary 를 사용하여 플러그인을 불러올 때 검색할 디렉터리 목록을 paths 로 설정합니다. 기존의 모든 경로는 삭제되며, 경로 목록은 paths 에 지정된 경로와 애플리케이션 경로로 구성됩니다.

QCoreApplication 인스턴스가 소멸되면 라이브러리 경로는 기본값으로 재설정됩니다.

경고: QLibrary 는 현재 절대 경로가 아닌 라이브러리 경로를 조회하는 데 지정된 경로를 사용하지 않습니다.

libraryPaths(), addLibraryPath(), removeLibraryPath() 및 QLibrary도 참조하십시오 .

[static] void QCoreApplication::setSetuidAllowed(bool allow)

allow 가 true인 경우, UNIX 플랫폼에서 애플리케이션이 setuid로 실행되도록 허용합니다.

allow 가 false(기본값)이고 Qt가 애플리케이션이 실제 사용자 ID와 다른 유효 사용자 ID로 실행되고 있음을 감지하면, QCoreApplication 인스턴스가 생성될 때 애플리케이션이 중단됩니다.

Qt는 공격 표면이 넓기 때문에 setuid 프로그램에 적합한 솔루션이 아닙니다. 그러나 역사적인 이유로 인해 일부 애플리케이션은 이러한 방식으로 실행되어야 할 수도 있습니다. 이 플래그를 설정하면 Qt가 이러한 상황을 감지했을 때 애플리케이션을 중단하지 않게 되며, QCoreApplication 인스턴스를 생성하기 전에 반드시 설정해야 합니다.

참고: 이 옵션은 보안 위험을 초래하므로 활성화하지 않는것이 강력히권장됩니다 . 만약 이 애플리케이션이 이 플래그를 활성화하고 자식 프로세스를 시작하는 경우, 자체적으로 setuid(2) 를 호출하여 가능한 한 빨리 권한을 해제하거나, 늦어도 QProcess::UnixProcessParameters::ResetIds 플래그를 사용하여 권한을 해제해야 합니다.

isSetuidAllowed()도 참조하십시오 .

[static] bool QCoreApplication::startingUp()

애플리케이션 객체가 아직 생성되지 않은 경우 true 을 반환하고, 그렇지 않은 경우 false 을 반환합니다.

closingDown()도 참조하십시오 .

[static] bool QCoreApplication::testAttribute(Qt::ApplicationAttribute attribute)

attribute 속성이 설정되어 있으면 true 을 반환하고, 그렇지 않으면 false 을 반환합니다.

setAttribute()도 참조하십시오 .

[static] QString QCoreApplication::translate(const char *context, const char *sourceText, const char *disambiguation = nullptr, int n = -1)

설치된 번역 파일을 조회하여 sourceText 에 대한 번역 텍스트를 반환합니다. 번역 파일은 가장 최근에 설치된 파일부터 첫 번째로 설치된 파일까지 역순으로 검색됩니다.

QObject::tr()는 이 기능을 보다 편리하게 제공합니다.

context 는 일반적으로 클래스 이름(예: "MyDialog")이며, sourceText 는 영어 텍스트이거나 식별을 위한 짧은 텍스트입니다.

disambiguation 는 동일한 컨텍스트 내에서 서로 다른 역할에 동일한 ` sourceText `가 사용될 때를 위한 식별 문자열입니다. 기본값은 ` nullptr`입니다.

컨텍스트, 모호성 해소 및 주석에 대한 자세한 내용은 QTranslator 및 QObject::tr() 문서를 참조하십시오.

n 는 복수형을 지원하기 위해 %n 과 함께 사용됩니다. 자세한 내용은 QObject::tr()을 참조하십시오.

번역 파일 중 어느 것도 context 내의 sourceText 에 대한 번역을 포함하지 않는 경우, 이 함수는 sourceText 에 해당하는 QString 를 반환합니다.

이 함수는 가상 함수가 아닙니다. QTranslator 을 상속하여 대체 번역 기법을 사용할 수 있습니다.

참고: 이 함수는 스레드 안전합니다.

QObject::tr(), installTranslator(), removeTranslator() 및 Internationalization and Translations도 참조하십시오 .

관련 비회원 함수

void qAddPostRoutine(QtCleanUpFunction ptr)

QCoreApplication 의 소멸자에서 호출될 전역 루틴을 추가합니다. 이 함수는 일반적으로 프로그램 전체에 적용되는 기능을 위한 정리 루틴을 추가하는 데 사용됩니다.

정리 루틴은 추가된 순서와 반대로 호출됩니다.

ptr 로 지정된 함수는 인수를 받지 않아야 하며, 반환값도 없어야 합니다. 예를 들어:

static int *global_ptr = nullptr;

static void cleanup_ptr()
{
    delete [] global_ptr;
    global_ptr = nullptr;
}

void init_ptr()
{
    global_ptr = new int[100];      // allocate data
    qAddPostRoutine(cleanup_ptr);   // delete later
}

애플리케이션 또는 모듈 전체에 걸친 정리 작업의 경우, qAddPostRoutine()은 종종 적합하지 않다는 점에 유의하십시오. 예를 들어, 프로그램이 동적으로 로드되는 모듈로 나뉘어 있는 경우, QCoreApplication 의 소멸자가 호출되기 훨씬 전에 관련 모듈이 언로드될 수 있습니다. 이러한 경우에도 qAddPostRoutine()을 사용해야 한다면, qRemovePostRoutine()을 사용하여 QCoreApplication 소멸자에 의해 루틴이 호출되는 것을 방지할 수 있습니다. 예를 들어, 모듈이 언로드되기 전에 해당 루틴이 호출된 경우를 들 수 있습니다.

모듈 및 라이브러리의 경우, 참조 카운트 방식의 초기화 관리자나 Qt의 부모-자식 삭제 메커니즘을 사용하는 것이 더 나을 수 있습니다. 다음은 부모-자식 메커니즘을 사용하여 적절한 시점에 정리 함수를 호출하는 비공개 클래스의 예입니다:

class MyPrivateInitStuff : public QObject
{
public:
    static MyPrivateInitStuff *initStuff(QObject *parent)
    {
        if (!p)
            p = new MyPrivateInitStuff(parent);
        return p;
    }

    ~MyPrivateInitStuff()
    {
        // cleanup goes here
    }

private:
    MyPrivateInitStuff(QObject *parent)
        : QObject(parent)
    {
        // initialization goes here
    }

    static MyPrivateInitStuff *p;
};

적절한 부모 객체를 선택함으로써, 모듈의 데이터를 적절한 시점에 정리하도록 만들 수 있는 경우가 많습니다.

참고: 이 함수는 Qt 5.10부터 스레드 안전합니다.

참고: 이 함수는 스레드 안전합니다.

qRemovePostRoutine()도 참조하십시오 .

void qRemovePostRoutine(QtCleanUpFunction ptr)

ptr 로 지정된 정리 루틴을 QCoreApplication 소멸자가 호출하는 루틴 목록에서 제거합니다. 해당 루틴은 이전에 qAddPostRoutine() 호출을 통해 목록에 추가되어 있어야 하며, 그렇지 않은 경우 이 함수는 아무런 효과도 없습니다.

참고: 이 함수는 Qt 5.10부터 스레드 안전합니다.

참고: 이 함수는 스레드 안전합니다.

참조: qAddPostRoutine().

매크로 문서

Q_COREAPP_STARTUP_FUNCTION(QtStartUpFunction ptr)

QCoreApplication 생성자에서 호출될 전역 함수를 추가합니다. 이 매크로는 일반적으로 애플리케이션이 초기화를 위해 라이브러리를 호출할 필요 없이, 프로그램 전체에 적용되는 기능을 위해 라이브러리를 초기화하는 데 사용됩니다.

ptr 로 지정된 함수는 인수를 받지 않아야 하며, 반환값도 없어야 합니다. 예를 들어:

// Called once QCoreApplication exists
static void preRoutineMyDebugTool()
{
    MyDebugTool* tool = new MyDebugTool(QCoreApplication::instance());
    QCoreApplication::instance()->installEventFilter(tool);
}

Q_COREAPP_STARTUP_FUNCTION(preRoutineMyDebugTool)

시작 함수는 QCoreApplication 생성자의 마지막 단계에서, GUI 초기화가 시작되기 전에 실행된다는 점에 유의하십시오. 함수 내에서 GUI 코드가 필요한 경우, 타이머(또는 큐에 등록된 호출)를 사용하여 나중에 이벤트 루프에서 초기화를 수행하십시오.

QCoreApplication 가 삭제되고 다른 QCoreApplication 가 생성되면, startup 함수가 다시 호출됩니다.

참고: 이 매크로는 애플리케이션에 정적으로 링크되는 라이브러리 코드에서는 사용하기에 적합하지 않습니다. 링커에 의해 제거되어 함수가 전혀 호출되지 않을 수 있기 때문입니다.

참고: 이 매크로는 재진입 가능합니다.

Q_DECLARE_TR_FUNCTIONS(context)

Q_DECLARE_TR_FUNCTIONS() 매크로는 다음과 같은 시그니처를 가진 변환 함수 tr() 를 선언하고 구현합니다.

static inline QString tr(const char *sourceText,
                         const char *comment = nullptr);

이 매크로는 ` QObject`을 상속하지 않는 클래스에서 ` QObject::tr()`을 사용하고자 할 때 유용합니다.

Q_DECLARE_TR_FUNCTIONS()는 클래스 정의의 맨 위(첫 번째 public: 또는 protected: 이전)에 위치해야 합니다. 예를 들면 다음과 같습니다:

class MyMfcView : public CView
{
    Q_DECLARE_TR_FUNCTIONS(MyMfcView)

public:
    MyMfcView();
    //...
};

context 매개변수는 일반적으로 클래스 이름이지만, 임의의 텍스트로 지정할 수도 있습니다.

Q_OBJECT 및 QObject::tr()도 참조하십시오 .

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.