2016-10-05 16 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)); 

Это также отвечает на вопрос, как они знают, что двигатель должен использовать приложение.

QQmlApplicationEngine просто берет одного из instance()QCoreApplication или его потомок QGuiApplication и использует его.

+1

Ha! Я создал несколько движков, но только первый. Наверное, я могу проследить его через источник больше, но это всего лишь детали. Интересная техника реализации ... – Makketronix

+0

@Makketronix Интересно, я думаю, вы сможете понять, почему только первый используется при изучении источников также – demonplus