2011-06-03 236 views
2

的QtWebKit的桥文档指出以下 - 持有的键值一个 列表修改QVariantMap用JavaScript

化合物(JSON)对象的JavaScript 化合物的对象,也称为JSON 对象,将变量对,其中所有 键都是字符串,值可以是 有任何类型。这很好地转化为QVariantMap,它不是 ,而是QString的QMap到 QVariant。 JSON对象和QVariantMap 之间的无缝转换 允许的 传递任意结构化数据℃之间 ++和JavaScript 环境非常方便的方式。原生QObject必须 确保将化合物值 转换为QVariantMaps和 QVariantLists,并且JavaScript是 保证以 有意义的方式接收它们。请注意,JSON不支持 的类型,例如 JavaScript函数和 getters/setters,不会被转换。

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

我已经尝试添加getter和setter用于测试目的 -

Q_PROPERTY(QVariantMap Settings READ GetShadowSettings WRITE SetShadowSettings)

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

Q_INVOKABLE void Update(QString key, QVariant value) { 
    settings[key] = value; 
} 

我只是想知道是否有这样做,而不需要一个辅助函数的方式 -

我可以用一个简单的辅助功能,例如修改数据?

回答

0

我用PhantomJS的QVariantMap,它工作得很好。例如,WebPage#viewportSize就是QVariantMap的实现。通常的问题是你不能尝试只更新它的一个属性,例如viewportSize.width = 300。您必须返回一个对象,例如:

viewportSize = { width: 300, height: 200 }

如果您需要能够做到前者,唯一(丑陋)可能的解决方法是创建一个帮助对象,例如, Size在上述情况下,它具有适当的setter和getter为个人财产和处理桥接的管家。