我怎样才能得到一个`QQuickItem`派生类中访问`QQmlApplicationEngine`

2019-10-29 07:38发布

可变engine在以下典型main一个的功能QtApp是的有效实例QQmlApplicationEngine

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

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

  return app.exec();
}

是否有可能获得访问的对象QQmlApplicationEngine一个函数里面QQuickItem派生类? 如果是的话,怎么样?

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

需要注意的是TestItem登记在qml侧与在主窗口中显示出来。 我知道我可以通过QQmlApplicationEnginemain方法。 但是,我有一种预感,因为我TestItem是窗口的一部分和持有的上下文。 应该有办法让一个对象或指针QQmlApplicationEngine ,而不必从传main的方法?

目标:使用QQmlApplicationEngine我能访问QQuickItem在我main.qml这样做:

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

所以这样做,我想给QQmlApplicationEngine 。 如果那里有一种方式来获得访问其他QQuickItem从一个内部当时的请建议。

Answer 1:

您可以使用此静态函数:

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

当然,这可能是一个好主意是否contextForObject()你尝试调用之前返回一个有效的指针engine()它。

然后你可以使用qobject_cast<QQmlApplicationEngine*>(engine)这应该给你想要的指针,只要你的应用程序确实是一个QQmlApplicationEngine基础之一。



文章来源: How can I get access to object of `QQmlApplicationEngine` inside a `QQuickItem` derived class?