Qt: Как взаимодействуют QGuiApplication и QQmlApplicationEngine?
Я пытаюсь понять магию, лежащую в основе Qt. Кажется, я упускаю важную концепцию взаимодействия QML и C++.
В следующей демонстрации "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
и использует это.