Qt 使用JavaScript修改QVariantMap

Qt 使用JavaScript修改QVariantMap,qt,qtwebkit,Qt,Qtwebkit,QtWebKit桥接器文档说明了以下内容- 复合(JSON)对象JavaScript 复合对象,也称为JSON 对象,是包含 键值对列表,其中所有 键是字符串,值可以 有任何类型。这翻译得非常好 对QVariantMap来说,这算不了什么 超过QString的QMap到 QVariant。无缝转换 在JSON对象和QVariantMap之间 允许以非常方便的方式 传递任意结构化数据 在C++与JavaScript之间 环境本地QObject必须 确保复合值是正确的 转换为QVariantMaps

QtWebKit桥接器文档说明了以下内容-

复合(JSON)对象JavaScript 复合对象,也称为JSON 对象,是包含 键值对列表,其中所有 键是字符串,值可以 有任何类型。这翻译得非常好 对QVariantMap来说,这算不了什么 超过QString的QMap到 QVariant。无缝转换 在JSON对象和QVariantMap之间 允许以非常方便的方式 传递任意结构化数据 在C++与JavaScript之间 环境本地QObject必须 确保复合值是正确的 转换为QVariantMaps和 QVariantList,JavaScript是 保证在短时间内收到它们 有意义的方式。请注意,类型 JSON不支持,例如 JavaScript函数和 不转换getter/setter

这是否意味着,尽管JavaScript能够读取QVariantList,但它无法修改它

我尝试添加一个getter和setter用于测试目的-

Q_属性(QVariantMap设置读取GetShadowSettings写入SetShadowSettings)

当JavaScript希望从QVariantMap访问任何数据时,将调用getter函数。不幸的是,当JavaScript试图更新QVariantMap时,会再次调用getter函数(而不是setter函数)

我可以使用一个简单的辅助函数修改数据,例如-

Q_INVOKABLE void Update( QString key, QVariant value ) {
    settings[key] = value;
}
我只是想知道是否有一种不需要帮助函数的方法可以做到这一点?

我用于PhantomJS,它工作得很好。例如,在其实现中只是QVariantMap。通常的问题是,您无法尝试仅更新其一个属性,例如
viewportSize.width=300
。您必须传回一个对象,例如:

viewportSize={宽度:300,高度:200}

如果您需要能够做到前者,唯一(丑陋的)解决方法可能是创建一个helper对象,例如在上面的例子中,
Size
,该对象对于单个属性具有适当的setter和getter,并处理桥接的内务处理。

我用于PhantomJS,它工作得很好。例如,在其实现中只是QVariantMap。通常的问题是,您无法尝试仅更新其一个属性,例如
viewportSize.width=300
。您必须传回一个对象,例如:

viewportSize={宽度:300,高度:200}

如果您需要能够执行前者,唯一(丑陋的)解决方法可能是创建一个helper对象,例如在上述情况下,
Size
,该对象具有针对单个属性的适当setter和getter,并处理桥接的内部管理