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
。如果有一种方法可以从一个内部访问其他"homepage": "https://myserver/MyApp",
,请建议。
答案 0 :(得分:1)
您可以使用此静态功能:
QQmlEngine::contextForObject(this)->engine();
当然,在您尝试为其调用contextForObject()
之前,engine()
是否返回有效指针可能是个好主意。
然后您可以使用qobject_cast<QQmlApplicationEngine*>(engine)
,只要您的应用程序确实基于QQmlApplicationEngine
,就可以为您提供所需的指针。