2016-10-05 3 views
1

J'essaie de comprendre la magie sous-jacente derrière Qt. Il semble qu'il me manque un concept important dans la façon dont QML et C++ interagissent. Dans la démo suivante "Hello World", la plus élémentaire, une application est déclarée, un moteur est déclaré, puis une application est exécutée.Qt: Comment QGuiApplication et QQmlApplicationEngine interagissent-ils?

Nulle part à ce niveau nous disons à l'application d'utiliser le moteur. Comment qt sait-il?

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

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

    return app.exec(); 
} 

Répondre

1

Il n'y a pas de magie, il se passe réellement. Dans les sources Qt il y a ce qui suit dans QQmlApplicationEnginePrivate.cpp:

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

C'est répond aussi à la question de savoir comment ils savent que le moteur doit utiliser l'application.

QQmlApplicationEngine ne prend que seul instance() de QCoreApplication ou son descendant QGuiApplication et utilise.

+1

Ha! J'ai créé plusieurs moteurs mais seul le premier est utilisé. Je suppose que je peux le retracer à travers la source plus, mais ce n'est que des détails. Intéressant technique de mise en œuvre ... – Makketronix

+0

@Makketronix Intéressant, je suppose que vous serez en mesure de comprendre pourquoi seul le premier est utilisé en regardant dans les sources aussi – demonplus