使用JavaScript修改QVariantMap

时间:2011-06-03 17:02:33

标签: qt qtwebkit

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;
}

我只是想知道是否有办法在不需要辅助功能的情况下这样做?

1 个答案:

答案 0 :(得分:0)

我将QVariantMap用于PhantomJS,它运行得很好。例如,WebPage#viewportSize在其实现中只是QVariantMap。通常的问题是你不能尝试仅更新其中一个属性,例如viewportSize.width = 300。你必须传回一个对象,例如:

viewportSize = { width: 300, height: 200 }

如果你需要能够做前者,可能有用的唯一(丑陋)解决方法是创建一个辅助对象,例如Size在上述情况下,它具有适当的个人财产的设定者和吸气剂,并处理过渡的管理。