如何访问派生 class 的 `QQuickItem` 中的 `QQmlApplicationEngine` 对象?
How can I get access to object of `QQmlApplicationEngine` inside a `QQuickItem` derived class?
QtApp
的以下典型 main
函数中的变量 engine
是 QQmlApplicationEngine
.
的有效实例
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));
return app.exec();
}
是否可以在 QQuickItem
派生的 class 函数中访问 QQmlApplicationEngine
的对象?如果是,如何?
class TestItem : public QQuickItem {
public:
TestItem();
SomeMethod() {
// Is it possible to get access to QQmlApplicationEngine here somehow ?
}
}
请注意 TestItem
注册在 qml
侧并显示在主 window 上。我知道我可以通过 QQmlApplicationEngine
from main
方法。但是,我有一种预感,因为我的 TestItem
是 window 的一部分并且拥有上下文。应该有一种方法可以获取指向 QQmlApplicationEngine
的对象或指针,而不必从 main
方法传递?
objective: 使用 QQmlApplicationEngine
我可以访问 main.qml
中的 QQuickItem
,方法是:
QQuickItem *some_quick_item = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("SomeQuickItem");
所以为了做到这一点,我想要 QQmlApplicationEngine
。如果有办法从内部访问其他 QQuickItem
,请提出建议。
你可以使用这个静态函数:
QQmlEngine::contextForObject(this)->engine();
当然,在尝试为它调用 engine()
之前,先确定 contextForObject()
returns 是否为有效指针可能是个好主意。
然后您可以使用 qobject_cast<QQmlApplicationEngine*>(engine)
,只要您的应用程序确实是基于 QQmlApplicationEngine
的应用程序,它应该会为您提供所需的指针。
QtApp
的以下典型 main
函数中的变量 engine
是 QQmlApplicationEngine
.
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/qml/main.qml")));
return app.exec();
}
是否可以在 QQuickItem
派生的 class 函数中访问 QQmlApplicationEngine
的对象?如果是,如何?
class TestItem : public QQuickItem {
public:
TestItem();
SomeMethod() {
// Is it possible to get access to QQmlApplicationEngine here somehow ?
}
}
请注意 TestItem
注册在 qml
侧并显示在主 window 上。我知道我可以通过 QQmlApplicationEngine
from main
方法。但是,我有一种预感,因为我的 TestItem
是 window 的一部分并且拥有上下文。应该有一种方法可以获取指向 QQmlApplicationEngine
的对象或指针,而不必从 main
方法传递?
objective: 使用 QQmlApplicationEngine
我可以访问 main.qml
中的 QQuickItem
,方法是:
QQuickItem *some_quick_item = qml_engine->rootObjects()[0]->findChild<QQuickItem*>("SomeQuickItem");
所以为了做到这一点,我想要 QQmlApplicationEngine
。如果有办法从内部访问其他 QQuickItem
,请提出建议。
你可以使用这个静态函数:
QQmlEngine::contextForObject(this)->engine();
当然,在尝试为它调用 engine()
之前,先确定 contextForObject()
returns 是否为有效指针可能是个好主意。
然后您可以使用 qobject_cast<QQmlApplicationEngine*>(engine)
,只要您的应用程序确实是基于 QQmlApplicationEngine
的应用程序,它应该会为您提供所需的指针。