QtWebKit Bridge文档说明了以下内容 -
复合(JSON)对象JavaScript 复合对象,也称为JSON 对象,是包含a的变量 键值对列表,其中所有 键是字符串,值可以 有任何类型。这很翻译 很好的QVariantMap,这没什么 不仅仅是QString的QMap 的QVariant。无缝转换 JSON对象和QVariantMap之间 允许一种非常方便的方式 传递任意结构化数据 在C ++和JavaScript之间 环境。本机QObject必须 确保复合值是 转换为QVariantMaps和 QVariantLists和JavaScript是 保证在一个 有意义的方式注意那种类型 JSON不支持,例如 JavaScript函数和 getter / setters,不会被转换。
这是否意味着,虽然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;
}
我只是想知道是否有办法在不需要辅助功能的情况下这样做?
答案 0 :(得分:0)
我将QVariantMap用于PhantomJS,它运行得很好。例如,WebPage#viewportSize在其实现中只是QVariantMap。通常的问题是你不能尝试仅更新其中一个属性,例如viewportSize.width = 300
。你必须传回一个对象,例如:
viewportSize = { width: 300, height: 200 }
。
如果你需要能够做前者,可能有用的唯一(丑陋)解决方法是创建一个辅助对象,例如Size
在上述情况下,它具有适当的个人财产的设定者和吸气剂,并处理过渡的管理。