Могу ли я получить доступ из C++ к QQmlContext, в котором содержится QtObject?

У меня есть своего рода одноэлементный вспомогательный объект, который, однако, я не хочу быть на самом деле одноэлементным, потому что я предпочитаю помещать вещи в стек/кучу. Поэтому я создал его в куче и установил как contextProperty моего корневого QQmlContext. У меня также есть подкласс QObject на C++, экземпляр которого создается в дереве объектов QQmlContext.

Могу ли я получить доступ из C++ к QQmlContext, в котором содержится QObject, чтобы получить доступ к рассматриваемому contextProperty?

Я знаю, что могу сделать что-то вроде этого:

// in main.cpp
engine.rootContext()->setContextProperty("_cp", cp);

// in foo.qml
MyQObjectSubclass {
    cp: _cp
}

// in myqobjectsubclass.h:
// (macro from http://syncor.blogspot.bg/2014/11/qt-auto-property.html)
AUTO_PROPERTY(MyQObjectSubclass*, cp)

Но это означает, что я всегда должен засорять свои экземпляры QML MyQObjectSubclass шаблоном «cp: _cp».


person Stefan Monov    schedule 21.06.2017    source источник


Ответы (1)


Я только что нашел способ:

QQmlEngine::contextForObject(myQObject)

Еще не пробовал.

Эквивалентно:

#include <QtQml>

// ...

qmlContext(myQObject);
person Stefan Monov    schedule 21.06.2017