У меня есть вспомогательный объект sorta-singleton, который, однако, я не хочу быть на самом деле одиночным, потому что я предпочитаю помещать вещи в стек / кучу. Поэтому я создал его в куче и установил его как 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)
Но это означает, что я всегда должен забивать свои экземпляры MyQObjectSubclass QML с помощью шаблона «cp: _cp».
Я просто нашел способ:
QQmlEngine::contextForObject(myQObject)
Еще не пробовал.
Эквивалентное:
#include <QtQml>
// ...
qmlContext(myQObject);
Других решений пока нет …