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()
并使用它。
我正在尝试了解 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()
并使用它。