如何在`QQuickItem`派生类中访问`QQmlApplicationEngine`的对象?

时间:2017-08-15 19:47:22

标签: c++ qt qquickitem qqmlapplicationengine

engine的以下典型main函数中的变量QtAppQQmlApplicationEngine的有效实例。

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方注册{&};显示在主窗口上。我知道我可以从QQmlApplicationEngine方法传递main。但是,我有一种预感,因为我的TestItem是窗口的一部分&掌握背景。应该有一种方法可以获得QQmlApplicationEngine的对象或指针而无需从main方法传递?

目标:使用QQmlApplicationEngine我可以通过QQuickItem访问main.qml中的QQuickItem *some_quick_item = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("SomeQuickItem");

QQmlApplicationEngine

为此,我想要QQuickItem。如果有一种方法可以从一个内部访问其他"homepage": "https://myserver/MyApp", ,请建议。

1 个答案:

答案 0 :(得分:1)

您可以使用此静态功能:

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

当然,在您尝试为其调用contextForObject()之前,engine()是否返回有效指针可能是个好主意。

然后您可以使用qobject_cast<QQmlApplicationEngine*>(engine),只要您的应用程序确实基于QQmlApplicationEngine,就可以为您提供所需的指针。