Как я могу получить доступ к объекту `QQmlApplicationEngine` внутри производного класса` QQuickItem`?

Переменная 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, Если есть способ получить доступ к другим QQuickItems изнутри одного, пожалуйста, предложите.

0

Решение

Вы можете использовать эту статическую функцию:

QQmlEngine::contextForObject(this)->engine();

Конечно, это может быть хорошей идеей contextForObject() возвращает действительный указатель, прежде чем пытаться вызвать engine() для этого.

Тогда вы можете использовать qobject_cast<QQmlApplicationEngine*>(engine) который должен дать вам желаемый указатель, пока ваше приложение действительно QQmlApplicationEngine основанный один.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]