2016-10-05 22 views
1

Qtの背後にある根本的な魔法を理解しようとしています。 QMLとC++のやり取りの重要な概念が欠落しているようです。Qt:QGuiApplicationとQQmlApplicationEngineはどのように相互作用しますか?

次の「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の1つだけを取り、それを使用します。

+1

ハ!私は複数のエンジンを作りましたが、最初のエンジンだけが使われました。私はソースを通してもっとそれを辿ることができると思いますが、それはちょっとしたことです。面白い実装テクニック... – Makketronix

+0

@Makketronix興味深い、私はあなたが最初のものだけがソースを調べて使用される理由を理解することができるだろうと思います – demonplus

関連する問題