Переменная 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
s изнутри одного, пожалуйста, предложите.
Вы можете использовать эту статическую функцию:
QQmlEngine::contextForObject(this)->engine();
Конечно, это может быть хорошей идеей contextForObject()
возвращает действительный указатель, прежде чем пытаться вызвать engine()
для этого.
Тогда вы можете использовать qobject_cast<QQmlApplicationEngine*>(engine)
который должен дать вам желаемый указатель, пока ваше приложение действительно QQmlApplicationEngine
основанный один.
Других решений пока нет …