2017-08-15 8 views
0

変数engineは、次のような典型的なmainの機能QtAppQQmlApplicationEngineの有効なインスタンスです。`QQuickItem`派生クラスの中で` QQmlApplicationEngine`のオブジェクトにアクセスするにはどうしたらいいですか?

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

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

    return app.exec(); 
} 

それはQQuickItem派生クラスの関数内QQmlApplicationEngineのオブジェクトへのアクセスを取得することはできますか?はいの場合、どうですか?

class TestItem : public QQuickItem { 
public: 
    TestItem(); 
    SomeMethod() { 
    // Is it possible to get access to QQmlApplicationEngine here somehow ? 
    } 
} 

TestItemがメイン画面に表示qml側&に登録されていることに留意されたいです。私はmainメソッドからQQmlApplicationEngineを渡すことができることを知っています。しかし、私はTestItemがウィンドウの一部であるので、ぼんやりしています&は、コンテキストを保持しています。 mainメソッドから渡すことなく、QQmlApplicationEngineへのオブジェクトまたはポインタを取得する方法があるはずですか?

目的:は、私はそうすることによって、私のmain.qmlQQuickItem Sへのアクセスを得ることができQQmlApplicationEngineを使用する:

QQuickItem *some_quick_item = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("SomeQuickItem"); 

だからこれを行うために、私は QQmlApplicationEngineにしたいです。もしあなたが他の人へのアクセスを得る方法があるなら、お勧めします。あなたがしようとすると、それのために engine()を呼び出す前に、 contextForObject()が有効なポインタを返すかどうかは良い考えかもしれません。もちろん、

QQmlEngine::contextForObject(this)->engine(); 

+1

このオブジェクトに頻繁にアクセスする場合は、毎回それを検索することはお勧めしません。一度それを見つけてすぐにアクセスできる場所に保管してください。 – dtech

+0

ええ。同意する。私はmainからqmlapplicationengineを必要なクラスに渡しました。そのためには動作がはるかに優れていて、アプリケーション全体でqmlapplicationengineのオブジェクトが1つあります。 –

答えて

1

あなたはこの静的関数を使用することができます。

次に、アプリケーションが実際にQQmlApplicationEngineに基づいている限り、希望のポインタを与えるqobject_cast<QQmlApplicationEngine*>(engine)を使用できます。

+0

これは 'QQmlEngine'を返しています。私が必要とするのは 'QQmlApplicationEngine'です。私が必要とする 'QQmlApplicationEngine'をキャストまたは抽出する方法はありますか? –

+0

回答を参照してください – dtech

+0

答えをお寄せいただきありがとうございます。 @dtech。あなたが[this](https://stackoverflow.com/questions/45693175/how-can-i-do-map-glframebufferobject-texture-to-a-qquickitem)に関する何かを提案することは可能ですか?私は昨日提起した質問ですか? https://stackoverflow.com/questions/45693175/how-can-i-do-map-glframebufferobject-texture-to-a-qquickitem –

関連する問題