【发布时间】:2011-06-03 17:02:32
【问题描述】:
QtWebKit Bridge 文档声明如下 -
复合 (JSON) 对象 JavaScript 复合对象,也称为 JSON 对象,是持有一个 键值对列表,其中所有 键是字符串,值可以 有任何类型。这翻译得很 对 QVariantMap 来说很好,这没什么 不仅仅是一个 QString 的 QMap QVariant。无缝转换 JSON对象和QVariantMap之间 允许一种非常方便的方式 传递任意结构化数据 在 C++ 和 JavaScript 之间 环境。原生 QObject 必须 确保复合值是 转换为 QVariantMaps 和 QVariantLists 和 JavaScript 是 保证收到他们在 有意义的方式。请注意,类型 JSON不支持,比如 JavaScript 函数和 getter/setter,不会被转换。
这是否意味着,虽然 JavaScript 能够读取 QVariantList,但无法对其进行修改?
我已经尝试添加一个 getter 和 setter 用于测试目的 -
Q_PROPERTY( QVariantMap Settings READ GetShadowSettings WRITE SetShadowSettings )
当 JavaScript 想要访问来自 QVariantMap 的任何数据时,将调用 getter 函数。不幸的是,当 JavaScript 尝试更新 QVariantMap 时,会再次调用 getter 函数(而不是 setter 函数)。
我可以使用简单的辅助函数来修改数据,例如 -
Q_INVOKABLE void Update( QString key, QVariant value ) {
settings[key] = value;
}
我只是想知道是否有一种方法可以在不需要辅助函数的情况下做到这一点?
【问题讨论】: