以下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,请提出建议。

最佳答案

您可以使用此静态函数:

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


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

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

10-08 11:54