変数engine
は、次のような典型的なmain
の機能QtApp
がQQmlApplicationEngine
の有効なインスタンスです。`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.qml
にQQuickItem
Sへのアクセスを得ることができQQmlApplicationEngine
を使用する:
QQuickItem *some_quick_item = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("SomeQuickItem");
だからこれを行うために、私は
QQmlApplicationEngine
にしたいです。もしあなたが他の人へのアクセスを得る方法があるなら、お勧めします。あなたがしようとすると、それのために
engine()
を呼び出す前に、
contextForObject()
が有効なポインタを返すかどうかは良い考えかもしれません。もちろん、
QQmlEngine::contextForObject(this)->engine();
:
このオブジェクトに頻繁にアクセスする場合は、毎回それを検索することはお勧めしません。一度それを見つけてすぐにアクセスできる場所に保管してください。 – dtech
ええ。同意する。私はmainからqmlapplicationengineを必要なクラスに渡しました。そのためには動作がはるかに優れていて、アプリケーション全体でqmlapplicationengineのオブジェクトが1つあります。 –