以下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,通过这样做,我可以在main.qml中访问QQuickItem:
QQuickItem *some_quick_item = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("SomeQuickItem");因此,为了做到这一点,我想QQmlApplicationEngine。如果有一种方法可以从内部访问其他QQuickItem,那么请提出建议。
发布于 2017-08-15 19:53:23
您可以使用这个静态函数:
QQmlEngine::contextForObject(this)->engine();当然,contextForObject()在尝试调用engine()之前是否返回一个有效的指针可能是个好主意。
然后,您可以使用qobject_cast<QQmlApplicationEngine*>(engine),只要您的应用程序确实是基于QQmlApplicationEngine的指针,它就会为您提供所需的指针。
https://stackoverflow.com/questions/45700420
复制相似问题