Qt5 QML QVariantMap Binding с уведомлениями об изменениях

У меня есть QVariantMap (не QObject, потому что имена свойств не определены заранее). И я добавляю QVariantMap в корневой контекст QML, чтобы использовать значения свойств для привязки.

Проблема в том, что когда я меняю QVariantMap или даже когда я меняю QVariantMap и вызываю setContextProperty для обновленного объекта, или когда я обновляю (с fromValue) объект, возвращаемый contextProperty, ничего не происходит. Так что это похоже на одноразовую привязку.

Итак, как правильно вводить карту или карту в контекст QML наблюдаемым образом, чтобы изменение элемента на карте отражалось в QML?


person adontz    schedule 29.01.2015    source источник


Ответы (2)



Вы можете создать QObject со свойством QVariantMap и установить этот объект как contextObject (см. http://doc.qt.io/qt-5/qqmlcontext.html#details для документации по contextObject). В вашем QML вы можете просто использовать свойство «карта» глобально, и оно должно обновляться при вызове MyVariantMap::setMap().

class MyVariantMap : public QObject {
    Q_OBJECT
    Q_PROPERTY(QVariantMap map READ map WRITE setMap NOTIFY mapChanged)

public:
    QVariantMap map() const { return Map; }
    void setMap(QVariantMap map) {
       if(Map != map) {
           Map = map;
           emit mapChanged()
       }
    }

signals:
 void mapChanged();

private:
    QVariantMap Map;

};
person vpicaver    schedule 29.01.2015