2016-10-05 1 views
1

Qt의 기본 마법을 이해하려고합니다. QML과 C++가 상호 작용하는 방식에 중요한 개념이 빠진 것 같습니다.Qt : QGuiApplication과 QQmlApplicationEngine은 어떻게 상호 작용합니까?

다음 "Hello World"데모에서는 가장 기본적인 응용 프로그램이 선언되고 엔진이 선언 된 다음 응용 프로그램이 실행됩니다.

이 수준에서는 아무 것도 엔진을 사용하도록 앱을 알려주지 않습니다. qt는 어떻게 알 수 있습니까?

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 

    QQmlApplicationEngine engine; 
    engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); 

    return app.exec(); 
} 

답변

1

실제로 마법은 없습니다. Qt는 소스에서 QQmlApplicationEnginePrivate.cpp에 다음이 :

QCoreApplication::instance()->setProperty(
"__qml_using_qqmlapplicationengine", QVariant(true)); 

이 또한 그들이 그 엔진이 응용 프로그램을 사용해야 노하우 질문에 대한 대답입니다.

QQmlApplicationEngineinstance()QCoreApplication이거나 그 자손이 QGuiApplication 일뿐입니다.

+1

하! 여러 엔진을 만들었지 만 첫 번째 엔진 만 사용됩니다. 나는 소스를 통해 더 많이 추적 할 수 있다고 생각하지만, 그것은 단지 세부 사항입니다. 흥미로운 구현 기술 ... – Makketronix

+0

@Makketronix 흥미 롭다면, 왜 처음 소스 만 소스를 조사하여 사용했는지 파악할 수있을 것입니다. – demonplus

관련 문제