이 페이지에서

QQmlApplicationEngine Class

QQmlApplicationEngine은 단일 QML 파일에서 애플리케이션을 불러오는 편리한 방법을 제공합니다. 더 보기...

헤더: #include <QQmlApplicationEngine>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
상속: QQmlEngine

공개 함수

QQmlApplicationEngine(QObject *parent = nullptr)
QQmlApplicationEngine(const QString &filePath, QObject *parent = nullptr)
QQmlApplicationEngine(const QUrl &url, QObject *parent = nullptr)
(since 6.5) QQmlApplicationEngine(QAnyStringView uri, QAnyStringView typeName, QObject *parent = nullptr)
virtual ~QQmlApplicationEngine() override
QList<QObject *> rootObjects() const

공개 슬롯

void load(const QString &filePath)
void load(const QUrl &url)
void loadData(const QByteArray &data, const QUrl &url = QUrl())
(since 6.5) void loadFromModule(QAnyStringView uri, QAnyStringView typeName)
(since 6.0) void setExtraFileSelectors(const QStringList &extraFileSelectors)
void setInitialProperties(const QVariantMap &initialProperties)

신호

void objectCreated(QObject *object, const QUrl &url)
(since 6.4) void objectCreationFailed(const QUrl &url)

상세 설명

이 클래스는 ` QQmlEngine `와 ` QQmlComponent `를 결합하여 단일 QML 파일을 편리하게 불러올 수 있는 방법을 제공합니다. 또한 C++/QML 하이브리드 애플리케이션에서 일반적으로 C++을 통해 제어하는 일부 핵심 애플리케이션 기능을 QML에 노출합니다.

사용 방법은 다음과 같습니다:

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine("main.qml");
    return app.exec();
}

참고: QQuickView과 달리 , QQmlApplicationEngine은 루트 윈도우를 자동으로 생성하지 않습니다. Qt Quick 의 시각적 항목을 사용하는 경우, 해당 항목을 Window 내에 배치해야 합니다.

QGuiApplication (예: QtQuick)이 필요한 QML 모듈을 사용하지 않는다면, QQmlApplicationEngine과 함께 QCoreApplication 을 사용할 수도 있습니다.

기본 QQmlEngine 에서 변경된 구성 사항 목록:

  • quitQt XML-ph-0000@deepl.internal()를 QCoreApplication::quit()에 연결
  • 메인 QML 파일과 인접한 i18n 디렉터리에서 번역 파일을 자동으로 불러옵니다.
  • QJSEngine::uiLanguage / Qt.uiLanguage 속성이 변경되면 번역이 다시 로드됩니다.
  • 씬에 QQuickWindow 가 포함되어 있는 경우 자동으로 인큐베이션 컨트롤러를 설정합니다.
  • QQmlFileSelector 가 있으면 이를 URL 인터셉터로 자동 설정하여 모든 QML 파일과 자산에 파일 선택기를 적용합니다.

QQmlEngine 에서 상속된 메서드를 사용하여 엔진 동작을 추가로 조정할 수 있습니다.

참고: 번역 파일이 인식되려면 qml_ 접두사가 있어야 합니다(예: qml_ja_JP.qm).

참고: 번역 파일을 메인 QML 파일의 상대 경로에배치하려면 관련 qt_add_translations 호출에 RESOURCE_PREFIX를 추가해야 합니다. 여기에는 메인 파일의 Qml 모듈 리소스 접두사(기본값:/qt/qml )와 모듈 URI가 포함되어야 합니다. 예를 들어, "Translated"라는 모듈에 대한 번역 파일을 제공하려면:

qt_add_translations(App
    RESOURCE_PREFIX /qt/qml/Translated/i18n
    TS_FILE_BASE qml
    TS_FILE_DIR i18n
)

멤버 함수 문서

QQmlApplicationEngine::QQmlApplicationEngine(QObject *parent = nullptr)

지정된 ` parent`를 사용하여 새로운 `QQmlApplicationEngine`을 생성합니다. 나중에 QML 파일을 불러오려면 ` load()`를 호출해야 합니다.

QQmlApplicationEngine::QQmlApplicationEngine(const QString &filePath, QObject *parent = nullptr)

새로운 QQmlApplicationEngine을 생성하고, 지정된 filePath 위치에 있는 QML 파일을 불러옵니다. 이 경로는 로컬 파일이나 qrc 경로여야 합니다. 상대 경로가 지정된 경우, 해당 경로는 애플리케이션의 작업 디렉터리를 기준으로 해석됩니다.

이 기능은 편의성을 위해 제공되며, 빈 생성자를 사용한 후 load를 호출하는 것과 동일합니다.

QQmlApplicationEngine::QQmlApplicationEngine(const QUrl &url, QObject *parent = nullptr)

새로운 QQmlApplicationEngine을 생성하고, 지정된 url 경로의 QML 파일을 불러옵니다. 이는 편의상 제공되는 기능으로, 빈 생성자를 사용한 후 load를 호출하는 것과 동일합니다.

[explicit, since 6.5] QQmlApplicationEngine::QQmlApplicationEngine(QAnyStringView uri, QAnyStringView typeName, QObject *parent = nullptr)

새로운 QQmlApplicationEngine을 생성하고, uri 및 typeName 에서 지정된 QML 유형을 로드합니다. 이는 편의성을 위해 제공되는 기능이며, 빈 생성자를 사용한 후 loadFromModule 를 호출하는 것과 동일합니다.

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

[override virtual noexcept] QQmlApplicationEngine::~QQmlApplicationEngine()

QQmlApplicationEngine 와 해당 객체가 로드한 모든 QML 객체를 삭제합니다.

[slot] void QQmlApplicationEngine::load(const QString &filePath)

filePath 에 위치한 루트 QML 파일을 불러옵니다. ` filePath `는 로컬 파일의 경로이거나 리소스 파일 시스템 내 파일의 경로여야 합니다. ` filePath `가 상대 경로인 경우, 애플리케이션의 작업 디렉터리를 기준으로 한 상대 경로로 간주됩니다. 해당 파일에 정의된 객체 트리는 즉시 인스턴스화됩니다.

오류가 발생하면 qWarning 을 통해 오류 메시지가 출력됩니다.

참고: 이 슬롯은 오버로드되어 있습니다. 이 슬롯에 연결하려면:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        qmlApplicationEngine, qOverload(&QQmlApplicationEngine::load));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        qmlApplicationEngine, [receiver = qmlApplicationEngine](const QString &filePath) { receiver->load(filePath); });
더 많은 예제와 접근 방식에 대해서는 오버로드된 슬롯에 연결하기를 참조하십시오.

[slot] void QQmlApplicationEngine::load(const QUrl &url)

url 에 위치한 루트 QML 파일을 불러옵니다. 로컬 파일 URL의 경우, 해당 파일에 정의된 객체 트리가 즉시 생성됩니다. 원격 URL은 비동기적으로 불러오며, 객체 트리가 준비되었는지 확인하려면 objectCreated 신호를 수신 대기해야 합니다.

오류가 발생하면 objectCreated 신호가 null 포인터를 매개변수로 하여 발산되며, qWarning 를 통해 오류 메시지가 출력됩니다.

참고: 이 슬롯은 오버로드되어 있습니다. 이 슬롯에 연결하려면:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        qmlApplicationEngine, qOverload(&QQmlApplicationEngine::load));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        qmlApplicationEngine, [receiver = qmlApplicationEngine](const QUrl &url) { receiver->load(url); });
더 많은 예제와 접근 방식에 대해서는 오버로드된 슬롯에 연결하기를 참조하십시오.

[slot] void QQmlApplicationEngine::loadData(const QByteArray &data, const QUrl &url = QUrl())

data 에 명시된 QML을 불러옵니다. data 에 정의된 객체 트리가 즉시 인스턴스화됩니다.

url 가 지정된 경우, 해당 URL이 컴포넌트의 기본 URL로 사용됩니다. 이는 데이터 및 오류 메시지 내의 상대 경로에 영향을 미칩니다.

오류가 발생하면 qWarning 를 사용하여 오류 메시지가 출력됩니다.

[slot, since 6.5] void QQmlApplicationEngine::loadFromModule(QAnyStringView uri, QAnyStringView typeName)

uri 로 지정된 모듈에서 QML 타입 typeName 를 불러옵니다. 타입이 원격 URL에 위치한 QML 파일에서 유래한 경우, 해당 타입은 비동기적으로 불러옵니다. 객체 트리가 준비되었는지 확인하려면 objectCreated 신호를 수신해야 합니다.

오류가 발생하면 objectCreated 신호가 null 포인터를 매개변수로 하여 발산되며, qWarning 를 통해 오류 메시지가 출력됩니다.

QQmlApplicationEngine engine;
engine.loadFromModule("QtQuick", "Rectangle");

참고: uri 로 식별된모듈은 QML 파일 내에서 import uri 를 호출하는 것과 동일한 방식으로 임포트 경로에서 검색됩니다. 해당 경로에서 모듈을 찾을 수 없는 경우, 이 함수는 실패합니다.

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

QQmlComponent::loadFromModule도 참조하십시오 .

[signal] void QQmlApplicationEngine::objectCreated(QObject *object, const QUrl &url)

이 신호는 객체의 로딩이 완료되었을 때 발생합니다. 로딩이 성공하면 ` object `에는 로딩된 객체에 대한 포인터가 포함되며, 그렇지 않은 경우 포인터는 `NULL`입니다.

또한 ` object `가 유래한 컴포넌트에 대한 ` url `도 제공됩니다.

참고: 컴포넌트의 경로가 상대 경로를 포함하는 QString 로 제공된경우 , url 에는 파일에 대한 완전히 해결된 경로가 포함됩니다.

[signal, since 6.4] void QQmlApplicationEngine::objectCreationFailed(const QUrl &url)

이 신호는 오류가 발생하여 로딩이 완료되었을 때 발생합니다.

로드에 실패한 컴포넌트의 url 가 인자로 제공됩니다.

QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;

// exit on error
QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed,
    &app, []() { QCoreApplication::exit(-1); }, Qt::QueuedConnection);
engine.load(QUrl());
return app.exec();

참고: 컴포넌트의 경로가 상대 경로를 포함하는 QString 로 제공된경우 , url 에는 파일에 대한 완전히 해결된 경로가 포함됩니다.

이 신호와 함께(생성이 실패했더라도) 발송되는 QQmlApplicationEngine::objectCreated 도 참조하십시오.

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

QList<QObject *> QQmlApplicationEngine::rootObjects() const

QQmlApplicationEngine 에 의해 인스턴스화된 모든 루트 객체의 목록을 반환합니다. 이 목록에는 load() 또는 편의 생성자를 통해 로드된 객체만 포함됩니다.

참고: Qt 5.9 이전버전에서는 이 함수가const 로 표시됩니다.

[slot, since 6.0] void QQmlApplicationEngine::setExtraFileSelectors(const QStringList &extraFileSelectors)

로컬 파일의 URL을 해결하는 데 사용되는 내부 ` QQmlFileSelector `에 전달될 ` extraFileSelectors `을 설정합니다. ` extraFileSelectors `은 첫 번째 QML 파일이 로드될 때 적용됩니다. 그 이후에 설정해도 아무런 효과가 없습니다.

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

QQmlFileSelector 및 QFileSelector::setExtraSelectors도 참조하십시오 .

[slot] void QQmlApplicationEngine::setInitialProperties(const QVariantMap &initialProperties)

QML 컴포넌트가 로드된 후 초기화될 때 사용되는 initialProperties 를 설정합니다.

QQmlApplicationEngine engine;

EventDatabase eventDatabase;
EventMonitor eventMonitor;

engine.setInitialProperties({
    { "eventDatabase", QVariant::fromValue(&eventDatabase) },
    { "eventMonitor", QVariant::fromValue(&eventMonitor) }
});

QQmlComponent::setInitialProperties, QQmlApplicationEngine::load 및 QQmlApplicationEngine::loadData도 참조하십시오 .

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