Как изменить свойство контекста из c++?
Вопрос такой, как я могу изменить свойство контекста, которое было задано как
_core->engine()->rootContext()->setContextProperty("currentZoneProperty", new CurrentZoneProperty);
Где CurrentZoneProperty следующий класс
class CurrentZoneProperty final : public QObject
{
Q_OBJECT
Q_PROPERTY(QString currentName READ currentName WRITE setCurrentName NOTIFY currentNameChanged)
public:
QString currentName() noexcept;
void setCurrentName(const QString ¤tName) noexcept;
Q_SIGNAL void currentNameChanged();
private:
QString _currentName;
};
Как я могу из другой части кода c++ могу обратиться к текущему свойству и изменить его свойство currentName? Из части qml это понятно, я там сразу вызываю обработку, но мне нужно именно прям из другой части c++...
Ответы (1 шт):
Вы можете сохранить указатель на передаваемый в QML объект, и вызывать его функции-члены непосредственно из C++.
Также Вы можете запросить свойство с помощью contextProperty и получить QVariant с нужным Вам свойством.
Не забывайте, что установка свойства через setContextProperty не передает владение объектом в QML. Это значит, что в Вашем случае созданный динамический объект типа CurrentZoneProperty в результате никто не удалит, если Вы сами об этом не позаботитесь.