首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在“`QQuickItem`”派生类中访问“`QQmlApplicationEngine`”对象?

如何在“`QQuickItem`”派生类中访问“`QQmlApplicationEngine`”对象?
EN

Stack Overflow用户
提问于 2017-08-15 19:47:21
回答 1查看 1.9K关注 0票数 0

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

代码语言:javascript
复制
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 派生类的函数中访问的对象吗?如果是,怎么做?

代码语言:javascript
复制
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,通过这样做,我可以在main.qml中访问QQuickItem

代码语言:javascript
复制
QQuickItem *some_quick_item = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("SomeQuickItem");

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-15 19:53:23

您可以使用这个静态函数:

代码语言:javascript
复制
QQmlEngine::contextForObject(this)->engine();

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45700420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档