以下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
侧注册并显示在主窗口中。我知道我可以通过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
的应用程序,它就会为您提供所需的指针。