Qt:QGuiApplication和QQmlApplicationEngine是如何交互的?

Qt: How does QGuiApplication and QQmlApplicationEngine interact?

我正在尝试了解 Qt 背后的潜在魔力。看来我错过了 QML 和 C++ 如何交互的重要概念。

下面的"Hello World"demo,最基本的,声明一个app,声明一个engine,然后执行一个app。

在这个级别我们没有告诉应用程序使用引擎。 qt怎么知道的?

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

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

  return app.exec();
}

没有魔法,它确实发生了。在 Qt 源中 QQmlApplicationEnginePrivate.cpp 中有以下内容:

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

这也回答了他们如何知道引擎应该使用该应用程序的问题。

QQmlApplicationEngine 只获取 QCoreApplication 或其后代 QGuiApplication 的单个 instance() 并使用它。