0

engine以下 a 的典型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侧面并显示在主窗口上。我知道我可以通过QQmlApplicationEnginefrommain方法。但是,我有一种预感,因为 myTestItem是窗口的一部分并拥有上下文。应该有一种方法可以获取对象或指针QQmlApplicationEngine而不必从main方法传递?

目标:使用QQmlApplicationEngineI 可以访问QQuickItemmy中main.qml的 s :

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

所以为了做到这一点,我想要QQmlApplicationEngine. 如果有一种方法可以从一个内部访问其他QQuickItems,那么请提出建议。

4

1 回答 1

1

您可以使用此静态函数:

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

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

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

于 2017-08-15T19:53:23.710 回答