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 и использует это.

Другие вопросы по тегам